程序集 - 如何使用 gdb 查看特定变量中的值
Assembly - How to see the value in a particular variable with 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
,用您需要的任何格式字符串替换其他数据(例如,空终止字符串只需要 "%s"
)。
这一切都是在 CygWin 下使用以下程序测试的:
section .data
msg: db "hello"
section .text
global _start
_start: mov eax, 42
ret
当您编译并 运行 时,您会得到预期的 42
作为 return 代码:
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
这是我的汇编代码
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
,用您需要的任何格式字符串替换其他数据(例如,空终止字符串只需要 "%s"
)。
这一切都是在 CygWin 下使用以下程序测试的:
section .data
msg: db "hello"
section .text
global _start
_start: mov eax, 42
ret
当您编译并 运行 时,您会得到预期的 42
作为 return 代码:
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