0
是否有gdb命令来查找函数参数的位置?我正在调试一个函数fun1,它输入一个我在stdin中输入的字符串。但是,我无法找到该字符串存储的位置。第一个参数是否应该存储在$ ebp + 8中?gdb命令查找参数
是否有gdb命令来查找函数参数的位置?我正在调试一个函数fun1,它输入一个我在stdin中输入的字符串。但是,我无法找到该字符串存储的位置。第一个参数是否应该存储在$ ebp + 8中?gdb命令查找参数
您可以看到使用“信息地址”变量的位置。这将尝试以用户友好的方式打印该位置。如果你知道DWARF,你可以使用“maint set dwarf2 always-disassemble 1”让它转储DWARF反汇编。
'ebp'可能是由函数序言设置的,但它不是强制性的。进入该函数后,第一个参数将在'esp + 4'上,但是'esp'稍后可能会更改。 – Jester
@Jester:我还在做32bit,但是从技术上说,至少第一个参数是8(%ebp)(或者如果没有序言,则为8(%esp)):argc;的argv [0];的argv [1]。我认为你只是说错话而已。对于OP:请注意上述位置实际上是指向真实位置的指针。 – gnometorule
@gnometorule不确定你的意思。第一个参数在函数输入时位于'esp + 4',或在'push ebp之后位于'ebp + 8'; mov ebp,esp'序列。当然,4的附加偏移量来自“推”。 – Jester