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.