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这太可怕了:) –