Составление этого кода:
int main ()
{
return 0;
}
с помощью:
gcc -S filename.cpp
... создает эту сборку:
.file "heloworld.cpp"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
.cfi_personality 0x0,__gxx_personality_v0
pushl %ebp
.cfi_def_cfa_offset 8
movl %esp, %ebp
.cfi_offset 5, -8
.cfi_def_cfa_register 5
movl $0, %eax
popl %ebp
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3"
.section .note.GNU-stack,"",@progbits
Мои вопросы:
- Это все после "." комментарий?
- Что такое .LFB0:?
- Что такое .LFE0:?
- Почему такой большой код только для "int main ()" и "return 0;"?
P.S. Я прочитал много сборочных сетевых книг, много (по крайней мере, 30) учебников, и все, что я могу сделать, это скопировать код и вставить его или переписать его. Сейчас я пробую другой подход, чтобы попытаться как-то научиться этому. Проблема в том, что я понимаю, что такое movl, pop и т. Д., Но не понимаю, как объединить эти вещи, чтобы сделать код «потоком». Я не знаю, где и как правильно начать писать программу в asm. Я все еще не динамический, как в C ++, но хочу изучать ассемблер.