Memory 汇编-如何使用gdb查看特定变量中的值

Memory 汇编-如何使用gdb查看特定变量中的值,memory,assembly,gdb,Memory,Assembly,Gdb,这是我的汇编代码 section .data msg: db "hello" section .text global _start _start: nop mov rax,23 nop 我可以用gdb访问“msg”中的数据吗?命令x/5cb&msg应该在正确的地址转储五个字节,以十进制和字符表示法 或者,您也应该能够使用printf%5.5s\n和&msg,以您需要的任何格式字符串替换其他数据,例如,以null结尾的字符串只需要%s 所有这些都是在CygWin下通过以下程序进行测试的:

这是我的汇编代码

section .data

msg: db "hello"

section .text
global _start
_start:
nop
mov rax,23
nop
我可以用gdb访问“msg”中的数据吗?命令x/5cb&msg应该在正确的地址转储五个字节,以十进制和字符表示法

或者,您也应该能够使用printf%5.5s\n和&msg,以您需要的任何格式字符串替换其他数据,例如,以null结尾的字符串只需要%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
在调试器中启动它,您可以看到获取消息所需的命令:

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