【发布时间】:2011-02-01 18:45:00
【问题描述】:
$ gcc -S buffer-overflow.c && cat buffer-overflow.s
_foo:
pushl %ebp ;2
movl %esp, %ebp ;3
subl $16, %esp ;4
movl LC1, %eax ;5
movl %eax, -4(%ebp) ;6
leal -4(%ebp), %eax ;7
leal 8(%eax), %edx ;8
movl $_bad, %eax ;9
movl %eax, (%edx) ;10
leave
ret
_main:
...
call _foo ;1
...
帮助信息说它不应该编译也不汇编:
-S Compile only; do not assemble or link
为什么它们是矛盾的?
【问题讨论】:
-
汇编实际上只是将机器码从文本形式转换为二进制形式。
-
人们总是采用口头捷径,不同的人以不同的方式使用术语。特别是 gcc 文档对于“compile”、“assemble”和“link”有它们的含义;并且这些术语中的每一个都可以隐藏输入的几个单独的传递和转换。试图强加你从其他来源获得的定义是愚蠢和徒劳的。现在是学习处理自然语言歧义的好时机。
标签: gcc switch-statement