X86 gdb信息帧输出:“”的值错误;Arglist在";?

X86 gdb信息帧输出:“”的值错误;Arglist在";?,x86,gdb,stack-trace,X86,Gdb,Stack Trace,只是好奇,但是有人能给我解释一下这个信息框输出吗。 这里有一个玩具程序: #include <stdio.h> int foo(int argc) { printf("Hello world! %d\n", argc); } int main(int argc, char *argv[]) { foo(argc); return 0; } 为什么本地人和arglist在同一个位置?据我了解,, 处的局部变量应将当前ebp值表示为上限地址 用于当前帧的局部

只是好奇,但是有人能给我解释一下这个
信息框
输出吗。 这里有一个玩具程序:

#include <stdio.h>

int foo(int argc) {
    printf("Hello world! %d\n", argc);
}

int main(int argc, char *argv[]) {
    foo(argc);
    return 0;
}
为什么本地人和arglist在同一个位置?据我了解,, 处的
局部变量应将当前ebp值表示为上限地址
用于当前帧的局部变量(它确实如此)。但是为什么arglist
指向同一个位置?根据打印
&argc
,的值
Arglist at
显然没有指向参数

另外,我确实理解x86调用约定和结构 堆栈帧的一部分。我只是觉得奇怪,所有的在线 我能找到的信息帧在
处具有相同的
Arglist值,在
处具有相同的
局部变量值,
但只有这一篇关于这种不一致性的文章:

无论如何,在某种程度上怀疑是否有已知的原因
对于这一点,以及/或者如何发布gdb bug。谢谢

这个输出只是矮人时代以前的遗物。至少在某些情况下,它应该被移除。请看非常精辟的gdb错误:

wow只需一票。我遇到了同样的问题:/
(gdb) info frame
Stack level 0, frame at 0x28abf0:
 eip = 0x401196 in foo (a.c:4); saved eip 0x4011c4
 called by frame at 0x28ac10
 source language c.
 Arglist at 0x28abe8, args: argc=1
 Locals at 0x28abe8, Previous frame's sp is 0x28abf0
 Saved registers:
  ebp at 0x28abe8, eip at 0x28abec
(gdb) p &argc
$1 = (int *) 0x28abf0
(gdb)