使用GDB读取寄存器指向的内存

4

如果我知道内存位置,是否有一种方法可以从GDB查看内存内容?

换句话说,我正在调试我为操作系统课程编写的x86汇编程序。现在,我正在尝试使用C和gas(GNU汇编器)为Linux上的x86编写用户级线程库。我分配了自己的堆栈,并使esp寄存器指向该内存位置。现在我想读取内存以查看我分配的堆栈中的内容。

2个回答

7
我会尝试使用以下命令(在下): ```bash (gdb) ```
 p (int*)$esp
 x /20x $esp
 p ((int*)$esp)[3]

请注意,x 可以让您指定块大小(字节、16 位、32 位、64 位),默认值是上次使用的值。最初为 32 位,即使在 x86 上 GCC 称其为“word”,但这不是 x86 ISA 术语中“word”的含义。 - Peter Cordes

5

使用x addr命令可以查看更多详细信息,具体请参考https://visualgdb.com/gdbreference/commands/x

x command
Displays the memory contents at a given address using the specified format.

Syntax
x [Address expression]
x /[Format] [Address expression]
x /[Length][Format] [Address expression]
x
Parameters
Address expression
Specifies the memory address which contents will be displayed. This can be the address itself or any C/C++ expression evaluating to address. The expression can include registers (e.g. $eip) and pseudoregisters (e.g. $pc). If the address expression is not specified, the command will continue displaying memory contents from the address where the previous instance of this command has finished.
Format
If specified, allows overriding the output format used by the command. Valid format specifiers are:
o - octal
x - hexadecimal
d - decimal
u - unsigned decimal
t - binary
f - floating point
a - address
c - char
s - string
i - instruction
The following size modifiers are supported:

b - byte
h - halfword (16-bit value)
w - word (32-bit value)
g - giant word (64-bit value)
Length
Specifies the number of elements that will be displayed by this command.

1
不幸的是,该链接已失效。 - KoKlA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接