Assembly 用于查找参数的gdb命令

Assembly 用于查找参数的gdb命令,assembly,gdb,Assembly,Gdb,是否有gdb命令来查找函数参数的位置?我正在调试一个函数fun1,它将我在stdin中输入的字符串作为输入。但是,我找不到存储此字符串的位置。第一个参数是否应始终存储在$ebp+8中?您可以使用“信息地址”查看变量的位置。这将尝试以用户友好的方式打印位置。如果您知道DWARF,您可以使用“maint set dwarf2 always disassembly 1”让它转储DWARF反汇编。ebp可以通过函数序言进行设置,但这不是强制性的。进入函数后,第一个参数将位于esp+4,但esp可能会在以

是否有gdb命令来查找函数参数的位置?我正在调试一个函数fun1,它将我在stdin中输入的字符串作为输入。但是,我找不到存储此字符串的位置。第一个参数是否应始终存储在$ebp+8中?

您可以使用“信息地址”查看变量的位置。这将尝试以用户友好的方式打印位置。如果您知道DWARF,您可以使用“maint set dwarf2 always disassembly 1”让它转储DWARF反汇编。

ebp
可以通过函数序言进行设置,但这不是强制性的。进入函数后,第一个参数将位于
esp+4
,但
esp
可能会在以后更改。@Jester:我仍在执行32位,但从技术上讲,至少第一个参数为8(%ebp)(如果没有序言,则为8(%esp)):argc;argv[0];argv[1]。我想你只是说错了,而且知道这一点。To OP:还要注意,上面的位置实际上是指向真实位置的指针。@我不确定您的意思。第一个参数在功能输入时位于esp+4,或在按下ebp后位于ebp+8;mov ebp,esp顺序。当然,额外的偏移量4来自于
推送
。@Jester:他说的是stdin。我认为他实际上是在谈论一个接受命令行参数的主函数,他需要argv[1]。在一个不是main的函数调用中,你是对的。但是他特别说了
functionfun1
,这显然不是
main
。更不用说你的
main
也错了,因为
argv
有type
char**
所以布局不是
argc;argv[0];argv[1]
,它实际上是
argc;argv
然后需要取消对argv+4的引用。