我正在使用平面二進制文件作爲我的操作系統的外部程序。當我編譯他們,就像這樣:在平面二進制文件中包含char數組的內容
gcc -Wall ctest.c -o ctest.bin -nostdlib -Wl,-Ttext=0x8000,-nostdlib -masm=intel
objcopy -O binary -j .text ctest.bin ctest
但這樣做,字符數組的內容都沒有把在文件中。這是我的代碼:
static volatile char string[4] = "Hi!\0";
static volatile char string2[15] = "Hello, World!\n\0";
int _start()
{
asm("mov eax, [string]");
asm("mov ebx, 0x00");
asm("int 0x01");
asm("mov eax, [string2]");
asm("mov ebx, 0x00");
asm("int 0x01");
return 0;
}
,當我運行objdump的(我跑了它的小精靈,但我確認它有相同的代碼,因爲這):
00008000 <_start>:
8000: 55 push ebp
8001: 89 e5 mov ebp,esp
8003: a1 70 90 00 00 mov eax,ds:0x9070
8008: bb 00 00 00 00 mov ebx,0x0
800d: cd 01 int 0x1
800f: a1 74 90 00 00 mov eax,ds:0x9074
8014: bb 00 00 00 00 mov ebx,0x0
8019: cd 01 int 0x1
801b: b8 00 00 00 00 mov eax,0x0
8020: 5d pop ebp
8021: c3 ret
正如你所看到的,文字無處可尋。我希望它會做這樣的事情:string db "Hi!", 0
,我會用nasm做。
我該怎麼做,它包括輸出bin文件中的字符,而無需在程序集中對其進行編碼?
在此先感謝。
更增添了幾分有用的標籤 –
@GrijeshChauhan謝謝,但這真的符合嵌入?因爲這是在普通PC上運行。 – farlepet
是的,但我補充說,可以注意到爲嵌入式工作的人。我認爲他們也可以幫助你解決這個問題:) –