0xb48daed9 <+3479>: lea -0xc(%ebp),%esp"的意义是什么?-6ren"> 0xb48daed9 <+3479>: lea -0xc(%ebp),%esp"的意义是什么?-谁能告诉我这条汇编指令的意义是什么: 0xb48daed9 : lea -0xc(%ebp),%esp 我对组装说明不是很满意。实际上,我在我的应用程序中收到了一个 SIGABRT,罪魁祸首似乎是这个-6ren">
gpt4 book ai didi

c++ - LEA 指令 "=> 0xb48daed9 <+3479>: lea -0xc(%ebp),%esp"的意义是什么?

转载 作者:行者123 更新时间:2023-11-28 06:23:11 25 4
gpt4 key购买 nike

谁能告诉我这条汇编指令的意义是什么:

0xb48daed9 <+3479>: lea -0xc(%ebp),%esp

我对组装说明不是很满意。实际上,我在我的应用程序中收到了一个 SIGABRT,罪魁祸首似乎是这个特定的汇编指令。

最佳答案

在机械层面上,指令

lea -0xc(%ebp),%esp

-0xc(即:-12)添加到%ebp并将结果写入%esp

在逻辑层面上,它分配一个被调用函数的栈帧。我希望在与此类似的上下文中看到它:

push %ebp            ; save previous base pointer
mov %esp,%ebp ; set %ebp = %esp: old stack pointer is new base pointer
lea -0xc(%ebp),%esp ; allocate 12 bytes for local variables

%ebp%esp 是堆栈指针寄存器。 %ebp 指向堆栈帧的底部,%esp 指向它的“顶部”(实际上是底部,因为堆栈向下增长),所以 lea 指令将堆栈指针移动到基址下方 12 个字节,为局部变量声明 12 个字节。在保存旧基指针并将新基指针设置为旧堆栈指针后执行此操作会将一个 12 字节的新帧推送到调用堆栈。

这条指令本身似乎不太可能导致陷阱,但如果发生堆栈溢出,分配的堆栈帧将无效,并且在尝试使用它时预计会发生爆炸。我怀疑你有失控的递归函数。

正如@abligh 提到的,另一种可能性是堆栈指针在该行的某处损坏。如果在堆栈分配的缓冲区中发生缓冲区溢出,从而导致先前保存的基指针被垃圾覆盖,则可能会发生这种情况。从函数返回时,垃圾被恢复以代替被覆盖的基指针,后续函数调用将没有任何有意义的工作。

关于c++ - LEA 指令 "=> 0xb48daed9 <+3479>: lea -0xc(%ebp),%esp"的意义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29005749/

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