Заголовок которые создает gcc ? не понимаю зачем

Тема в разделе "WASM.UNIX", создана пользователем lcat, 30 апр 2007.

  1. lcat

    lcat New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2007
    Сообщения:
    9
    Простейшая функция,
    Код (Text):
    1. int main(int argc, char** argv) {
    2. }
    gcc -ggdb -o exp2 exp2.c
    gdb exp2
    Код (Text):
    1.  В ATT
    2. (gdb) disassemble main
    3. Dump of assembler code for function main:
    4. 0x08048374 <main+0>:    push   %ebp
    5. 0x08048375 <main+1>:    mov    %esp,%ebp
    6. 0x08048377 <main+3>:    sub    $0x8,%esp
    7. 0x0804837a <main+6>:    and    $0xfffffff0,%esp
    8. 0x0804837d <main+9>:    mov    $0x0,%eax
    9. 0x08048382 <main+14>:   add    $0xf,%eax
    10. 0x08048385 <main+17>:   add    $0xf,%eax
    11. 0x08048388 <main+20>:   shr    $0x4,%eax
    12. 0x0804838b <main+23>:   shl    $0x4,%eax
    13. 0x0804838e <main+26>:   sub    %eax,%esp
    14. 0x08048390 <main+28>:   leave
    15. 0x08048391 <main+29>:   ret
    16. End of assembler dump.
    Код (Text):
    1.  В INTEL
    2. ((gdb) disassemble main
    3. Dump of assembler code for function main:
    4. 0x08048374 <main+0>:    push   ebp
    5. 0x08048375 <main+1>:    mov    ebp,esp
    6. 0x08048377 <main+3>:    sub    esp,0x8
    7. 0x0804837a <main+6>:    and    esp,0xfffffff0
    8. 0x0804837d <main+9>:    mov    eax,0x0
    9. 0x08048382 <main+14>:   add    eax,0xf
    10. 0x08048385 <main+17>:   add    eax,0xf
    11. 0x08048388 <main+20>:   shr    eax,0x4
    12. 0x0804838b <main+23>:   shl    eax,0x4
    13. 0x0804838e <main+26>:   sub    esp,eax
    14. 0x08048390 <main+28>:   leave
    15. 0x08048391 <main+29>:   ret
    16. End of assembler dump.
    Зачем вообще уменьшать ESP, ведь нет никаких переменных. Зачем эти add shr shl, они этим хотят флаги изменить?
    Буду рад любому коментарию.
     
  2. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    lcat
    ХЗ :derisive:
    быть может специфика main (непонятно только почему)
    все остальные пустые функции имеют обычный пролог/эпилог
    Код (Text):
    1. void F() {
    2. }
    3.  
    4. int main() {
    5.     F();
    6.     return 0;
    7. }
    Код (Text):
    1. ...
    2. .globl F
    3. F:
    4.     pushl %ebp
    5.     movl %esp, %ebp
    6.     popl %ebp
    7.     ret
    8. ...
     
  3. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    lcat
    Включите оптимизцию - часть мусора уйдёт. Вам ещё повезло, что он SEH не инициализирует. В одной из старых версий он это тоже добавлял всегда в main. Кстати, а какой командой в gdb включается интеловский синтаксис? Что-то в манах я ничего подобного не вижу...
     
  4. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    даже с -O3 "мусор" есть (почти в таком же количестве)
    а причем здесь SEH и *N?X?
    имхо, автор сам перевел :)
     
  5. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    Quantum
    set disassembly-flavor intel
    set disassembly-flavor att

    /* кстати, если надо могу выслать свое руководство по gdb,
    краткий конспект основных команд из манов, довольно удобное */
     
  6. ProfessorNimnull

    ProfessorNimnull New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2007
    Сообщения:
    26
    2 касперский, вышли плз. такая вещь должна всегда быть под рукой
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    ProfessorNimnull
    а лучше выложить гденить.
     
  8. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    ProfessorNimnull
    gdb-pack.zip на ftp://nezumi.org.ru
    логин WASM
     
  9. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    rei3er
    omit-frame-pointer форсирует удаление пролога, а в данном случае он и не нужен. Как гарантированно избавиться от лишнего выравнивания стека - не знаю, но у меня при O3 оно обычно опускается. Можно заменить main на обычную функцию, а потом через опции линкера обозначить её главной или вообще избавиться от LIBC, но это всё извратные способы. Наверное, выравнивание стека в main можно отключить каким-то штатным ключиком. С остальным мусором не знаю как быть. У меня такого не наблюдается. Версий GCC несколько: есть старые и новые в разных дистрибутивах Линукса и FreeBSD.

    Что-то он в FS пихал, а я по привычке списал на SEH :) Только сейчас задумался.

    kaspersky
    Ух ты! Суперские доки! Спасибо!!! Очень пригодилось.
     
  10. clone

    clone New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2006
    Сообщения:
    84
    Код (Text):
    1. $ gcc -mpreferred-stack-boundary=2 -S test.c
    2. $ cat test.s
    3.     .file   "test.c"
    4.     .text
    5. .globl main
    6.     .type   main, @function
    7. main:
    8.     pushl   %ebp
    9.     movl    %esp, %ebp
    10.     popl    %ebp
    11.     ret
    12.     .size   main, .-main
    13.     .ident  "GCC: (GNU) 4.1.1 (Gentoo 4.1.1-r3)"
    14.     .section    .note.GNU-stack,"",@progbits
     
  11. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    kaspersky
    s-ice

    прикольно
     
  12. lcat

    lcat New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2007
    Сообщения:
    9
    Я задал этот вопрос так как пробую себя в реверс инженренги.
    Читал как использовать ошибки в BUFFER OVERFLOWS и получал немного другие команды после компиляции.
    Самым удобным для себя нашел ключ -mpreferred-stack-boundary=2, получается почти то что ожидаешь.
    Использую gcc 3.4.6.
     
  13. ShadOS

    ShadOS New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2006
    Сообщения:
    39
    Адрес:
    0x48k
    Оффтоп: Крис, когда у вас будет нормальный сайт уже?
     
  14. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    ShadOS
    > Крис, когда у вас будет нормальный сайт уже?
    на инсидепро мои статьи выложены в нормальной форме (хотя это и не мой сайт),
    а у меня пока что стоит простой web/ftp сервер на домашней машине и все никак не хватает времени заняться им вплотную ;(