【问题标题】:Assembly - How to see the value in a particular variable with gdb汇编 - 如何使用 gdb 查看特定变量中的值
【发布时间】:2015-08-25 04:08:14
【问题描述】:

这是我的汇编代码

section .data

msg: db "hello"

section .text
global _start
_start:
nop
mov rax,23
nop

我可以使用 gdb 访问 'msg' 中的数据吗

【问题讨论】:

    标签: memory assembly gdb


    【解决方案1】:

    命令x/5cb &msg 应该以十进制和字符表示法在正确的地址转储五个字节。

    或者,您也应该能够使用printf "%5.5s\n", &msg,用您需要的任何格式字符串替换其他数据(例如,以空结尾的字符串只需要"%s")。

    这一切都在 CygWin 下使用以下程序进行了测试:

    section .data
    
    msg:    db    "hello"
    
    section .text
    global _start
    
    _start: mov   eax, 42
            ret
    

    当您编译并运行它时,您会得到预期的 42 作为返回码:

    pax> nasm -f elf -o prog.o prog.asm
    pax> ld -o prog.exe prog.o
    pax> ./prog.exe ; echo $?
    42
    

    在调试器中启动它,你可以在msg看到需要得到的命令:

    pax> gdb prog.exe
    GNU gdb (GDB) 7.8
    Copyright (C) 2014 Free Software Foundation, Inc.
    <blah blah blah>
    Reading symbols from prog.exe...(no debugging symbols found)...done.
    
    (gdb) b start
    Breakpoint 1 at 0x401000
    
    (gdb) r
    Starting program: /cygdrive/c/pax/prog.exe
    [New Thread 7416.0x20c0]
    Breakpoint 1, 0x00401000 in start ()
    
    (gdb) x/5cb &msg
    0x402000 <msg>: 104 'h' 101 'e' 108 'l' 108 'l' 111 'o'
    
    (gdb) printf "%5.5s\n", &msg
    hello
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多