最簡單的方法,找出是要堅持一個斷點main()
看一看:
所以從技術上來說,這個問題的答案是main()
是從一種叫start
調用。您沒有獲得start
的源代碼,但是如果需要的話,您可以在調試器中查看彙編代碼。這個版本是從模擬器內置代碼:
0x1c30: pushl $0
0x1c32: movl %esp, %ebp
0x1c34: andl $-16, %esp
0x1c37: subl $16, %esp
0x1c3a: movl 4(%ebp), %ebx
0x1c3d: movl %ebx, (%esp)
0x1c40: leal 8(%ebp), %ecx
0x1c43: movl %ecx, 4(%esp)
0x1c47: addl $1, %ebx
0x1c4a: shll $2, %ebx
0x1c4d: addl %ecx, %ebx
0x1c4f: movl %ebx, 8(%esp)
0x1c53: movl (%ebx), %eax
0x1c55: addl $4, %ebx
0x1c58: testl %eax, %eax
0x1c5a: jne 0x00001c53 ; start + 35
0x1c5c: movl %ebx, 12(%esp)
0x1c60: calll 0x00001c70 ; main at main.m:9
0x1c65: movl %eax, (%esp)
0x1c68: calll 0x00002376 ; exit
0x1c6d: hlt
0x1c6e: nop
0x1c6f: nop
如果您創建一個MacOS X的命令行程序,把一個斷點main()
,你會發現,main()
由start
在桌面上叫了。 Mac版start
的裝配不完全相同,但非常接近。因此,編譯器基於目標平臺爲您生成start
是一個很好的猜測,並且start
是操作系統啓動程序時的入口點。
非常感謝你 – 2012-07-20 07:29:18