如何在EAX寄存器中获取整数的字符串值

时间:2014-02-13 01:02:37

标签: gdb

我试图确定%eax寄存器中整数的字符串值是什么。

我正在使用gdb,命令

(gdb) info registers

输出:

eax            0x804c800    134531072
ecx            0xf  15
edx            0x1  1
ebx            0xffffd324   -11484
esp            0xffffd24c   0xffffd24c
ebp            0xffffd288   0xffffd288
esi            0x0  0
edi            0x0  0
eip            0x8048fca    0x8048fca <strings_not_equal>
eflags         0x286    [ PF SF IF ]
cs             0x23 35
ss             0x2b 43
ds             0x2b 43
es             0x2b 43
fs             0x0  0
gs             0x63 99

我想知道如何从值134531072

中获取一个单词

我尝试了print /s %eax,但我收到了错误A syntax error in expression, near %eax'

3 个答案:

答案 0 :(得分:4)

如果要打印eax的值

您可以使用

(gdb) info registers $eax
(gdb) print $eax

如果要打印$ eax指向的字符串,请尝试

(gdb) x/s $eax

有关x命令的详细信息,请参阅http://sourceware.org/gdb/onlinedocs/gdb/Memory.html

答案 1 :(得分:1)

首先,gdb中的寄存器用$ not%引用,因此它将是print / s $ eax。但是这不会将寄存器打印为字符(对我看起来应该是这样)。

但是这样做:print(char [4])$ eax。

(首先打印低位字节的字符。)

答案 2 :(得分:1)

这是做到这一点的方法:

print (char []) $rax

如果rax指向内存中的字符串,请使用:

printf "%s", $rax