我正在尝试使用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开关或者我的机器上的地址显示得更短的东西。如何切换地址的显示方式?
答案 0 :(得分:1)
这确实是正确的地址。
输出只有一个字节&#39;短&#39;。那是因为函数映射到0x0040062d。前导零字节由gdb条带化。
答案 1 :(得分:1)
您正在 64位系统上运行,该系统默认程序为 0x400000页面,教程基于 32位 system,默认为 0x8048000页面。
没有问题。
(如果gdb
没有关闭 ASLR ,那么这些数字都不会匹配,因为基页地址会被随机化&#39 ; 为了您的保护&#39;。)