gpt4 book ai didi

c - x86 汇编代码基本

转载 作者:行者123 更新时间:2023-11-30 14:26:13 27 4
gpt4 key购买 nike

以下代码的作用是什么...



 0x080489b0 <+0>:推送 %ebp
0x080489b1 <+1>: mov %esp,%ebp
0x080489b3 <+3>:子 $0x14,%esp
0x080489b6 <+6>:推送%ebx

据我所知,这在前两行中设置了堆栈,然后将 %esp 向下推 14 本质上增加了第三行的堆栈,最后将 %ebx 插入堆栈(即使它是空的),这也会增加堆栈,并将 %esp 向下推一位。

我的这些步骤有错吗?感谢您的帮助!

最佳答案

你大致是正确的。第三条指令 (sub $0x14,%esp) 实际上意味着将堆栈增长 0x14 = 20 字节,可能是出于对齐原因。第四行意味着将 %ebx 的 4 字节内容压入堆栈,作为副作用从 %esp 中减去 4。原因是%ebx是一个被调用者保存寄存器:如果一个函数修改了%ebx的内容,它应该将%ebx压入堆栈,然后修改%ebx,然后将%ebx从堆栈中弹出,这样调用者永远不会注意到 %ebx 的变化。 x86 上的其他被调用者保存寄存器是 %esi 和 %edi。

关于c - x86 汇编代码基本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9424222/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com