почему размер hello world на gasm в 6.3 килобайта?

Тема в разделе "WASM.UNIX", создана пользователем ieroglif, 12 сен 2008.

  1. ieroglif

    ieroglif New Member

    Публикаций:
    0
    Регистрация:
    12 сен 2008
    Сообщения:
    29
    размер исходника всего 400 байт.
    Код (Text):
    1. .data
    2. hello_str:
    3.         .string "Hello, world!\n"
    4.         .set hello_str_length, . - hello_str - 1
    5. .text
    6. .globl  main
    7.         .type main, @function
    8. main:
    9.         movl $4, %eax
    10.         movl $1, %ebx
    11.         movl    $hello_str, %ecx
    12.         movl    $hello_str_length, %edx
    13.         int     $0x80
    14.         movl    $1, %eax
    15.         movl    $0, %ebx
    16.         int     $0x80
    17.         .size   main, .-main
    но при компиляции размер программы получается 6 килобайт.
    почему так получается?
    как сделать размер программы минимальный?
     
  2. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    выложи полученный исполняемый файл
     
  3. Ra!N

    Ra!N New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2006
    Сообщения:
    111
    strip -s hello
     
  4. ieroglif

    ieroglif New Member

    Публикаций:
    0
    Регистрация:
    12 сен 2008
    Сообщения:
    29
    Ra!N спасибо. размер файла сократился до 2892 байт.
    размер hello world написаного на сишнике сократился до 2984 байт.
    как я понимаю, вся фишка в формате elf файла?
    или можно что-то ешё вырезать, или компилировать в другой формат?
    компилю обычным gcc hello.s -o hello без каких-либо ключей.

    rei3er ещё надо? у меня некоторая заморочка сейчас с хостингом..
     
  5. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Что-то gas много туда вставляет. Этот же код на fasm'е уместился в 164 байта.
    Код (Text):
    1. format ELF executable
    2.  
    3. segment readable writeable
    4. hello_str db "Hello, world!",0x0A
    5. hello_str_length = $ - hello_str
    6.  
    7. segment executable
    8. entry $
    9.         mov eax,4
    10.         mov ebx,1
    11.         mov ecx,hello_str
    12.         mov edx,hello_str_length
    13.         int     0x80
    14.         mov eax,1
    15.         mov ebx,0
    16.         int 0x80
     
  6. ieroglif

    ieroglif New Member

    Публикаций:
    0
    Регистрация:
    12 сен 2008
    Сообщения:
    29
    twgt согласен, это больше похоже на правду, почему и задумался, поковырялся и в итоге спросил тут. может есть какие ключи при компиляции?
     
  7. ieroglif

    ieroglif New Member

    Публикаций:
    0
    Регистрация:
    12 сен 2008
    Сообщения:
    29
    блин. я дурак, извиняюсь..
    прикладываю файл.
     
  8. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    GAS с libc линкует.
    FASM без нее.
    Вот и все.,
     
  9. ieroglif

    ieroglif New Member

    Публикаций:
    0
    Регистрация:
    12 сен 2008
    Сообщения:
    29
    osrootd а может заодно подскажешь как гас от этой вредной привычки отучить? ;)
     
  10. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    Никак

    .globl main
    .type main, @function
    main:

    в GAS равносильно

    int main()
    {
    ...
    }
    в Си

    А конструкции типа
    mov eax,1
    mov ebx,0
    int 0x80
    равносильны
    __syscall (1,0); в си
    Чтобы писать Executable файлы юзай фасм или насм. GAS не предназначен для этого.
     
  11. tr00p

    tr00p New Member

    Публикаций:
    0
    Регистрация:
    19 сен 2008
    Сообщения:
    1
    Сделал так:
    as test.s -o test.o
    ld test.o -o test.out -e main
    strip test.out

    В итоге test.out работает и весит 352 байта
     
  12. ieroglif

    ieroglif New Member

    Публикаций:
    0
    Регистрация:
    12 сен 2008
    Сообщения:
    29
    понял.
    спасибо всем.