размер исходника всего 400 байт. Код (Text): .data hello_str: .string "Hello, world!\n" .set hello_str_length, . - hello_str - 1 .text .globl main .type main, @function main: movl $4, %eax movl $1, %ebx movl $hello_str, %ecx movl $hello_str_length, %edx int $0x80 movl $1, %eax movl $0, %ebx int $0x80 .size main, .-main но при компиляции размер программы получается 6 килобайт. почему так получается? как сделать размер программы минимальный?
Ra!N спасибо. размер файла сократился до 2892 байт. размер hello world написаного на сишнике сократился до 2984 байт. как я понимаю, вся фишка в формате elf файла? или можно что-то ешё вырезать, или компилировать в другой формат? компилю обычным gcc hello.s -o hello без каких-либо ключей. rei3er ещё надо? у меня некоторая заморочка сейчас с хостингом..
Что-то gas много туда вставляет. Этот же код на fasm'е уместился в 164 байта. Код (Text): format ELF executable segment readable writeable hello_str db "Hello, world!",0x0A hello_str_length = $ - hello_str segment executable entry $ mov eax,4 mov ebx,1 mov ecx,hello_str mov edx,hello_str_length int 0x80 mov eax,1 mov ebx,0 int 0x80
twgt согласен, это больше похоже на правду, почему и задумался, поковырялся и в итоге спросил тут. может есть какие ключи при компиляции?
Никак .globl main .type main, @function main: в GAS равносильно int main() { ... } в Си А конструкции типа mov eax,1 mov ebx,0 int 0x80 равносильны __syscall (1,0); в си Чтобы писать Executable файлы юзай фасм или насм. GAS не предназначен для этого.
Сделал так: as test.s -o test.o ld test.o -o test.out -e main strip test.out В итоге test.out работает и весит 352 байта