【发布时间】:2014-06-09 21:11:48
【问题描述】:
是否有 gdb 命令来查找函数参数的位置?我正在调试一个函数 fun1,它将我在标准输入中输入的字符串作为输入。但是,我找不到存储此字符串的位置。第一个参数是否应该始终存储在 $ebp+8 中?
【问题讨论】:
-
ebp可以通过函数序言设置,但不是强制性的。第一个参数将在进入函数时位于esp+4,但以后可能会更改esp。 -
@Jester:我还在做 32 位,但从技术上讲,至少第一个参数是 8(%ebp)(如果没有序言,则为 8(%esp)):argc;参数 [0];参数 [1]。我假设你只是说错话并且知道这一点。致 OP:还要注意上面的位置实际上是指向真实位置的指针。
-
@gnometorule 不确定您的意思。第一个参数位于函数入口处的
esp+4,或push ebp; mov ebp, esp序列之后的ebp+8。 4 的额外偏移量当然来自push。 -
@Jester:他说的是标准输入。我认为他实际上是在谈论一个采用命令行参数的主函数,并且他需要 argv[1]。在不是 main_ 的函数调用中,你是对的。
-
但他特意说的是
function fun1,显然不是main。更不用说你对main也错了,因为argv有char**类型所以布局不是argc; argv[0]; argv[1],它实际上是argc; argv然后你需要取消引用argv+4。