如何使用GNU as / GNU ld创建小型二进制文件?

时间:2019-01-31 22:44:05

标签: assembly gnu ld

我喜欢amd64汇编程序的AT&T语法,所以我使用GNU As。不幸的是,我无法使用它创建合理大小的二进制文件。为了比较,这个简单的程序只是以fasm的值1退出:

;; a02.fasm
format ELF64 executable at 0000000100000000h    ; put image over 32-bit limit

segment readable executable

entry $

    xor edi,edi     ; exit code 0
    inc edi
    mov eax,60      ; sys_exit
    syscall

按照以下方式完成

$ fasm a02.fasm
flat assembler  version 1.73.06  (16384 kilobytes memory)
1 passes, 131 bytes.

生成微小的二进制文件。

等效程序,已编译并与binutils链接

# a01.S
.globl _start
_start:
    xor %di, %di
    inc %di
    mov $60, %eax
    syscall

使用以下命令:

as a01.S -o a01.o
ld a01.o

产生巨大的二进制文件:

$ du -hb a.out
4744    a.out
$ strip -s a.out
$ du -hb a.out
4408    a.out
$ file a.out
a.out: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped

asld都来自Debian软件包binutils=2.31.1-11

我在做什么错了?

0 个答案:

没有答案