0
根據網上的教程,當我拆開一個計劃,我應該看到這樣的代碼:(C的hello world)%,這意味着
0x8048384 push ebp
0x8048385 mov ebp,esp
0x8048387 sub esp,0x8
0x804838a and esp,0xfffffff0
0x804838d mov eax,0x0
0x8048392 sub esp,eax
0x8048394 mov DWORD PTR [esp],0x80484c4
0x804839b call 0x80482b0 <_init+56>
0x80483a0 mov eax,0x0
0x80483a5 leave
0x80483a6 ret
但是,我看到的是:
0x0804860c <+0>: push %ebp
0x0804860d <+1>: mov %esp,%ebp
0x0804860f <+3>: and $0xfffffff0,%esp
0x08048612 <+6>: sub $0x10,%esp
0x08048615 <+9>: movl $0x8048720,0x4(%esp)
0x0804861d <+17>: movl $0x804a040,(%esp)
0x08048624 <+24>: call 0x8048500 <[email protected]>
0x08048629 <+29>: mov $0x0,%eax
0x0804862e <+34>: leave
0x0804862f <+35>: ret
其中參數(?不知道它是如何調用的,我的意思是%esp,%ebp thingies)與第一個代碼中的內容完全相反。是否由於'%'標記?他們甚至是什麼意思? (以及'$'是什麼意思?)
第一個被稱爲「intel語法」,第二個被稱爲「WTF就是所有這些廢話」:) –
@MartinJames AT&T語法是Unix的傳統,源於PDP和VAX彙編程序。由於奇怪的英特爾禮儀,Unix系統沒有理由放棄所有便利的東西。 – Netch
@Netch這太可怕了:) –