【问题标题】:Getting asm vars when debugging in gdb在 gdb 中调试时获取 asm var
【发布时间】:2019-10-09 01:07:42
【问题描述】:

我在 gdb 中有以下设置,我在第 22 行有一个断点:

循环代码为:

start_loop:                             
        movl data_items(,%edi,4), %eax  
        cmpl $0, %eax                   
        je exit_loop                    
        incl %edi                       
        cmpl %ebx, %eax                 
        jge start_loop                  
        movl %eax, %ebx                 
        jmp start_loop                  
exit_loop:      

如何查看gdb 中的所有这些值?比如看看%eax是什么,%ebx是什么,%edi是什么,data_items(,%edi,4)是什么?

【问题讨论】:

  • 在 gdb 中尝试help。很多方式,你可以做info registersp $eax 和类似的。要检查内存,请使用x 命令。
  • @Jester 没错,但是当我尝试这样做时,我得到:>>> p %eax A syntax error in expression, near %eax'。 >>> p eax 当前上下文中没有符号“eax”。`
  • 仔细看。我使用了$ 而不是%
  • 请不要显示图片的文字。改为显示文本。

标签: assembly gdb


【解决方案1】:

比如看看%eax是什么,%ebx是什么,%edi是什么,

正如小丑已经说过的:

(gdb) info registers
(gdb) p/x $rax   # Your program appears to run on a 64-bit machine,
                 # so use $rax instead of $eax
(gdb) p/x $rbx

什么是 data_items(,%edi,4)

如果您使用(gdb) disas,这会更容易。既然你没有,我们不知道data_items 位于哪个地址。像这样的东西应该可以工作:

(gdb) x/wx (char*)&data_items + 4 * $rdi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-31
    • 2023-02-26
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多