ld 链接器在输出到二进制文件时添加了额外的汇编指令
ld linker is adding extra assembly instruction when outputing to binary file
我有一个 C 源文件,它只包含一个函数,它除了 returns 一个函数的值外什么都不做,我已经通过使用 gcc -ffreestanding 选项从它生成一个目标文件来输出一个目标文件没有标准库和入口点,但是当我尝试使用 gnu 链接器输出二进制文件时,它向它添加了额外的汇编指令,下面是源文件
int test_function() {
return 0x4141;
}
我使用这个 gcc 命令生成了一个目标文件 gcc -ffreestanding -c source.c -o source.o
我将此命令用于 ld 链接器
ld -o source.bin -Ttext 0x0 --oformat 二进制 source.o
我使用链接器得到的结果是
使用 ndisasm -b 32 source.bin
转储
00000000 F30F1EFA rep hint_nop55 edx
00000004 55 push ebp
00000005 48 dec eax
00000006 89E5 mov ebp,esp
00000008 B8BABA0000 mov eax,0xbaba
0000000D 5D pop ebp
0000000E C3 ret
0000000F 0000 add [eax],al
00000011 0000 add [eax],al
00000013 0000 add [eax],al
00000015 0000 add [eax],al
00000017 0000 add [eax],al
00000019 0000 add [eax],al
0000001B 0000 add [eax],al
0000001D 0000 add [eax],al
0000001F 0000 add [eax],al
00000021 0000 add [eax],al
00000023 0000 add [eax],al
00000025 0000 add [eax],al
00000027 0000 add [eax],al
00000029 0000 add [eax],al
0000002B 0000 add [eax],al
0000002D 0000 add [eax],al
0000002F 0000 add [eax],al
00000031 0000 add [eax],al
00000033 0000 add [eax],al
00000035 0000 add [eax],al
00000037 0000 add [eax],al
00000039 0000 add [eax],al
0000003B 0000 add [eax],al
0000003D 0000 add [eax],al
0000003F 0000 add [eax],al
00000041 0000 add [eax],al
00000043 0000 add [eax],al
00000045 0000 add [eax],al
00000047 0000 add [eax],al
00000049 0000 add [eax],al
链接器添加了 add [eax]、al asm 指令,我只是不想那样,我只想要 .text 段(前 7 条指令) 是 C 程序汇编等效指令,其余的我不知道它来自哪里。
有什么帮助吗?
谢谢。
对齐需要这些说明。注意字节值都是0.
我有一个 C 源文件,它只包含一个函数,它除了 returns 一个函数的值外什么都不做,我已经通过使用 gcc -ffreestanding 选项从它生成一个目标文件来输出一个目标文件没有标准库和入口点,但是当我尝试使用 gnu 链接器输出二进制文件时,它向它添加了额外的汇编指令,下面是源文件
int test_function() {
return 0x4141;
}
我使用这个 gcc 命令生成了一个目标文件 gcc -ffreestanding -c source.c -o source.o
我将此命令用于 ld 链接器 ld -o source.bin -Ttext 0x0 --oformat 二进制 source.o
我使用链接器得到的结果是
使用 ndisasm -b 32 source.bin
转储00000000 F30F1EFA rep hint_nop55 edx
00000004 55 push ebp
00000005 48 dec eax
00000006 89E5 mov ebp,esp
00000008 B8BABA0000 mov eax,0xbaba
0000000D 5D pop ebp
0000000E C3 ret
0000000F 0000 add [eax],al
00000011 0000 add [eax],al
00000013 0000 add [eax],al
00000015 0000 add [eax],al
00000017 0000 add [eax],al
00000019 0000 add [eax],al
0000001B 0000 add [eax],al
0000001D 0000 add [eax],al
0000001F 0000 add [eax],al
00000021 0000 add [eax],al
00000023 0000 add [eax],al
00000025 0000 add [eax],al
00000027 0000 add [eax],al
00000029 0000 add [eax],al
0000002B 0000 add [eax],al
0000002D 0000 add [eax],al
0000002F 0000 add [eax],al
00000031 0000 add [eax],al
00000033 0000 add [eax],al
00000035 0000 add [eax],al
00000037 0000 add [eax],al
00000039 0000 add [eax],al
0000003B 0000 add [eax],al
0000003D 0000 add [eax],al
0000003F 0000 add [eax],al
00000041 0000 add [eax],al
00000043 0000 add [eax],al
00000045 0000 add [eax],al
00000047 0000 add [eax],al
00000049 0000 add [eax],al
链接器添加了 add [eax]、al asm 指令,我只是不想那样,我只想要 .text 段(前 7 条指令) 是 C 程序汇编等效指令,其余的我不知道它来自哪里。
有什么帮助吗?
谢谢。
对齐需要这些说明。注意字节值都是0.