gdb地址太短了

时间:2014-05-05 12:20:01

标签: linux assembly gdb

我正在尝试使用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开关或者我的机器上的地址显示得更短的东西。如何切换地址的显示方式?

2 个答案:

答案 0 :(得分:1)

这确实是正确的地址。

输出只有一个字节&#39;短&#39;。那是因为函数映射到0x0040062d。前导零字节由gdb条带化。

答案 1 :(得分:1)

您正在 64位系统上运行,该系统默认程序为 0x400000页面,教程基于 32位 system,默认为 0x8048000页面

没有问题。

(如果gdb没有关闭 ASLR ,那么这些数字都不会匹配,因为基页地址会被随机化&#39 ; 为了您的保护&#39;。)