$ 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
...
的幫助信息說,它不應該編譯也不組裝:你能解釋爲什麼gcc -S輸出類似組裝的東西嗎?
-S Compile only; do not assemble or link
爲什麼他們是矛盾的?
裝配實際上只是機器代碼從文本形式到二進制形式的轉換。 – Paggas 2010-03-28 16:49:14
人們一直採取口頭捷徑,不同的人以不同的方式使用術語。特別是gcc文檔對於「編譯」,「彙編」和「鏈接」具有*它們自己的含義;並且這些術語中的每一個都可以隱藏幾個單獨的傳遞和輸入轉換。試圖強加從其他來源獲得的定義是愚蠢的,而且是徒勞的。現在是學習處理自然語言歧義的好時機。 – dmckee 2010-03-28 17:36:14