【问题标题】:gdb addresses too shortgdb 地址太短
【发布时间】:2014-05-05 12:20:00
【问题描述】:

我正在尝试使用 ROP 编程,因此我使用的是 gdb。所以我正在尝试执行此步骤:

(gdb) print not_called
$1 = {<text variable, no debug info>} 0x8048444 <not_called>

但是当我运行这个命令时,我会得到这样的结果:

(gdb) print not_called
$1 = {void ()} 0x40062d <not_called>

我在 64 位机器上运行它:

dirk@discordia:~/devel$ uname -p
x86_64

我做错了什么,或者我的机器上的地址比教程中的地址少两个字节是正确的吗?如果它只是一个 gdb 开关或我机器上的地址显示较短的东西。如何切换地址的显示方式?

【问题讨论】:

  • Gdb 不打印前导零。
  • 即使是这样...0x000000010x1 相同

标签: linux assembly gdb


【解决方案1】:

您在 64 位 系统上运行,该系统默认程序为 0x400000 页面,本教程是在 32 位 系统上构建的,默认为 0x8048000 页面

没有问题。

(如果gdb 没有关闭ASLR,那么这些数字都不会匹配,因为基页地址会被随机化'以保护您 em>'。)

【讨论】:

    【解决方案2】:

    这确实是正确的地址。

    输出只有一个字节'short'。那是因为函数映射在 0x0040062d。前导零字节由 gdb 条带化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-21
      • 2010-12-21
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      • 2020-01-27
      • 2015-12-22
      • 1970-01-01
      相关资源
      最近更新 更多