【发布时间】:2012-12-13 11:39:54
【问题描述】:
我正在使用平面二进制文件作为我的操作系统的外部程序。当我编译它们时,像这样:
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 时(我在 elf 上运行它,但我验证它具有与此相同的代码):
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 上运行的。
-
是的,但是我添加了这样可以注意到人们为嵌入式工作。我认为他们也可以帮助您解决这个问题:)
-
@GrijeshChauhan:那不是只检查文件吗?我在任何地方都找不到用它创建二进制文件的方法。
-
你给 objdump 什么标志?
标签: c assembly embedded inline-assembly osdev