【发布时间】:2011-03-02 14:17:29
【问题描述】:
编译这段代码:
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;”的代码这么大?
附:我读了很多汇编网络书籍,很多(至少 30 篇)教程,我所能做的就是复制代码并粘贴或重写它。现在我正在尝试一种不同的方法来尝试以某种方式学习它。问题是我确实了解什么是 movl、pop 等,但不了解如何将这些东西结合起来使代码“流动”。我不知道在哪里或如何正确开始用 asm 编写程序。我仍然是静态的,不像 C++ 那样动态,但我想学习汇编。
【问题讨论】:
-
你可以在这里找到一些有助于你理解汇编语言的视频:securitytube.net/groups?operation=view&groupId=5 这家伙有浓重的东欧口音。