【问题标题】:gdb command to find argumentsgdb 命令查找参数
【发布时间】: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 也错了,因为argvchar** 类型所以布局不是argc; argv[0]; argv[1],它实际上是argc; argv 然后你需要取消引用argv+4

标签: assembly gdb


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 2013-11-14
    • 1970-01-01
    相关资源
    最近更新 更多