我试图确定%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'
。
答案 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