memory - 程序集 - 如何使用 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,用您需要的任何格式字符串替换其他数据(空终止字符串,例如,只需要 "%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

关于memory - 程序集 - 如何使用 gdb 查看特定变量中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32195358/

相关文章:

C# 方法的内存处理

c++ - C/C++ 将 64 位整数转换为字符数组

arrays - Fortran 全局工作数组与本地动态分配数组

c - 汇编 x86-32 和一些 c 函数

assembly - 为什么要在汇编中添加一个值来初始化堆栈指针(R7)?

c++ - gdb 7.0 警告 : Wrong size fpregset in core file

macos - 如何在 Mac OSX El Capitan 中安装 gdb(调试器)?

c++ - 捕捉 c++ "Access Violation Writing Exception"?

gcc - x86 asm - 从 esp 中减去 12 个字节。只需要8个

linux - fatal error (11)在emacs中尝试进入gdb模式时出现段错误,这是怎么回事?