【问题标题】:Assembly/C/GDB: code to hexadecimal汇编/C/GDB:代码转十六进制
【发布时间】:2012-06-26 01:47:02
【问题描述】:

如何查看某些汇编命令的十六进制表示?

这是来自 gdb:

0x8048395 <simple+1>            mov    %esp,%ebp
0x8048397 <simple+3>            mov    $0x1,%eax
0x804839c <simple+8>            pop    %ebp                               
0x804839d <simple+9>            ret

“simple”是这个程序的c函数。我试过了

dump ihex value dump.hex simple

导致

:020000040804EE
:0183940000E8
:00000001FF

和

dump ihex memory dump.hex 0x8048394 0x804839d

结果不同

:020000040804EE
:098394005589E5B8010000005D07
:00000001FF

为什么它们不同?其中一个是正确的吗?

【问题讨论】:

  • 我不知道哪个是正确的,但你总是可以使用objdump...

标签: c assembly gdb hex


【解决方案1】:

要查看实际字节,您可以简单地使用:

disas /r simple

如果你想将文件转储到原始二进制文件中

dump binary memory file.bin 0x8048394 0x804839d

ihex 格式是 Intel Hex format,它并不像看起来那么简单。

此外,当您使用dump value 时,您正在转储函数地址的值,而不是函数本身的代码。这就是 dump memory 所做的。

更新:实际上,当您执行dump &lt;format&gt; value dump.hex simple 时,它会转储simple 的内容,但不知道如何转储函数值,它会将其转储为@987654329 @value,即转储函数的第一个字节。如果要转储函数的地址,只需:dump &lt;format&gt; value dump.hex &amp;simple。

【讨论】:

    猜你喜欢
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    • 2019-01-01
    • 1970-01-01
    • 2020-11-29
    • 2014-04-08
    • 1970-01-01
    相关资源
    最近更新 更多