【问题标题】:How to get string value of integer in the EAX register如何在 EAX 寄存器中获取整数的字符串值
【发布时间】:2014-02-13 01:02:37
【问题描述】:

我正在尝试确定 %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'

【问题讨论】:

    标签: gdb


    【解决方案1】:

    如果要打印eax的值

    你可以使用

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

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

    (gdb) x/s $eax
    

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

    【讨论】:

      【解决方案2】:

      这是这样做的方法:

      print (char []) $rax
      

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

      printf "%s", $rax
      

      【讨论】:

        【解决方案3】:

        首先 gdb 中的寄存器用 $ 而不是 % 来引用,所以它是 print/s $eax。但这不会将寄存器打印为字符(在我看来应该如此)。

        然而,这确实是: print (char[4]) $eax.

        (先打印低字节字符。)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-22
          相关资源
          最近更新 更多