在c ++中的函数内执行汇编。
|
长getesp(){
__asm __(\“ mov%esp,%eax \”);
}
void main(){
printf(\“%08X \\ n \”,getesp()+ 4);
}
为什么esp在设置堆栈框架之前指向值,并且与下面的代码有什么区别?
void main(){
__asm __(\“ mov%esp,%eax \”);
}
没有找到相关结果
已邀请:
1 个回复
贸会
具有一个
,它操纵
,并在行内的ѭ6and和
中获得被操纵的
。 进行函数调用以获取堆栈指针并将其放入
肯定是不同的,并且相差12个字节(在此特定情况下)。这是因为当您执行
时会推入
(如果不是跨段的,并且对于linux / unix正常程序执行来说只是is10ѭ)(需要引用),接下来在
函数内部还有另一个inside13ѭ和
,之后是堆栈指针减去4。因为
和
是4个字节,所以总差现在为12个字节。实际上我们可以在函数调用版本中看到。 没有该函数调用,将不会按
和进行其他
操作,因此我们在进行主设置后将获得
值。 我对AT&T不满意,因此下面是英特尔语法和Intex语法asm转储中的相同代码。请注意,在将主值内的
进入
的
调用中,没有推键或其他
修改,因此,main内的
获得了通过
行在主线中设置的
值。如上所述,通过调用
得到的值是(期望值)-12。 C代码
在我的情况下,输出是针对特定运行的:
英特尔语法转储为:
我希望这有帮助。