gpt4 book ai didi

gnu - x86-64 GNU 程序集

转载 作者:行者123 更新时间:2023-12-01 00:29:21 27 4
gpt4 key购买 nike

在调查崩溃时,我遇到了以下代码片段并立即意识到 mov 指令实际上应该是 movq 以获得正确的 64 位寄存器操作。

#elif defined(__x86_64__)
unsigned long rbp;
__asm__ volatile ("mov %%rbp, %0" : "=r" (rbp));
sp = (void **) rbp;
#else

除此之外,我还发现文档声称 x86-64 的 rbp 寄存器是通用的,不包含当前帧的地址。我还找到了声称 rbp 确实包含当前帧地址的文档。有人可以澄清一下吗?

最佳答案

关于您问题的第一部分(movq 而不是 mov),汇编程序(在本例中)将识别您的操作数是 64 位,并将正确使用 movqmov 不是有效指令,它是一种告诉汇编程序“根据操作数使用正确的 mov 变体”的方法。

关于第二部分,实际上两者兼而有之:它是一个通用寄存器,从某种意义上说它可以保存任何值。它还用作堆栈帧基址指针。 AMD64 的“2.4 堆栈操作”部分 Application programming手册说:

A stack is a portion of a stack segment in memory that is used to link procedures. Software conventions typically define stacks using a stack frame, which consists of two registers—a stack-frame base pointer (rBP) and a stack pointer (rSP)—

关于gnu - x86-64 GNU 程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9379089/

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