Как создать небольшой двоичный файл с GNU как / GNU ld? - PullRequest
0 голосов
/ 01 февраля 2019

Мне нравится AT & T синтаксис ассемблера amd64, поэтому я использую GNU As.К сожалению, я не могу создать двоичные файлы разумного размера с ним.Для сравнения, тривиальная программа, которая просто выходит со значением 1, реализованная в fasm:

;; 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

И as, и ld из пакета Debian binutils=2.31.1-11.

Что я делаю не так?

...