gpt4 book ai didi

c - gdb 调试 8 字节间隙有什么用?

转载 作者:行者123 更新时间:2023-11-30 14:38:48 24 4
gpt4 key购买 nike

我正在调试一个函数以了解有关内存中堆栈结构的更多信息。我在 Ubuntu OS x86 上使用 gdb。我的功能包括以下内容:

function func(){
long local1=0;
printf("address of swap is %p\n",&local1);
}

在 gdb 中,我在函数内设置了一个断点,并使用信息帧打印出帧值。我能够获取保存的 ebp 和 eip 寄存器的地址,我认为它们分别保存保存的基指针和返回地址。我还打印出了local1的地址。因此,使用这些地址我构建了以下堆栈:

bffff03c --> eip (stores the return address)
bffff038 --> ebp (saved base pointer)
bffff02c --> local1 address

现在我一定错过了一些东西,因为 ebp 和 local1 之间有 8 个字节的间隙。我假设 local1 数据类型是 4 个字节,这导致 bffff030 -> bffff038 之间的地址下落不明。非常感谢对此的帮助。

编辑

这是汇编代码。我能想到的唯一异常是 mov esp,ebp 后面的 SUB 指令,尽管我不确定它与间隙有何关系。 enter image description here

最佳答案

8 字节间隙是因为在 x86 上调用约定要求在函数入口处进行 16 字节堆栈对齐,而返回指针只有 8 字节。这样我们就得到了“浪费”的 8 个字节的空间。

关于c - gdb 调试 8 字节间隙有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56410176/

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