"黑客剥削艺术" - 装配不一致

时间:2014-11-21 03:58:33

标签: gcc assembly gdb

我正在研究“黑客攻击艺术”。我试图遵循代码示例,但由于某种原因,汇编代码与我实际的linux上的汇编代码不匹配(在虚拟盒上作为Guest运行)。我已经确定我已经安装了32位Linux操作系统。有没有我可以传递给gcc的args,它允许我将代码编译成一个与书中给出的内容紧密匹配的程序集?

我可以很好地协调本书与本书之间的代码差异。我看到他们是不是很小,但我看到的差别是鲜明的。我不知道是不喜欢运行“预配置孵化器环境”中的代码,因为这会抑制我的技能发展。

4 个答案:

答案 0 :(得分:7)

我实际上是在同一条船上 - 在过去的一两周里,我尝试了很多方法在我的正常开发环境(LMDE)中生成类似的汇编代码,包括chroot,编译使用-m32标志,安装x86 ubuntu等,并没有真正起作用。今天我找到了http://www.nostarch.com/hackingCD.htm,我按照说明操作,并且能够在vmware工作站10中启动livecd。这就是我所做的:

  1. 从上面的链接下载iso(尽管它应该与 livecd以及)
  2. 创建.vmx文件并从链接中复制并粘贴配置
  3. 我拿出了定义cdrom设备的部分,因为我使用的是iso
  4. 使用VmWare Workstation打开文件 - 如果您使用的是iso,请转到"编辑VM设置"并设置一个cdrom设备并将其指向iso
  5. VM启动没有任何问题
  6. 我知道这并不像在主操作系统/系统中查看示例一样方便,并且您试图避免使用LiveCD,但经过大量研究后我发现了这是一个非常普遍的问题,希望这个答案有助于某人。使用LiveCD可能并不理想,但它仍然比双启动要好得多。

答案 1 :(得分:4)

  

由于某种原因,汇编代码与我实际的linux上的汇编代码不匹配

最可能的原因是该书于2008年出版,并使用了当时稳定的GCC(您可以看到GCC发布历史here)。

您现在使用的GCC可能更新,因此产生了显着不同(并且希望更好)的代码。

  

有没有我可以传递给gcc的args,它允许我将代码编译成一个与书中给出的内容紧密匹配的程序集?

没有。您可以尝试编译和安装2008年的版本,可能是4.2.3或4.3.0,并检查是否可以提供更接近的输出。

P.S。看起来这本书的第一次修订是从2003年开始的,作者不太可能在2008年为第二版重建他们的所有例子,所以也许尝试使用GCC 3.3?

答案 2 :(得分:2)

这就是为什么这本书附带一个带有Linux发行版的LiveCD以及该书中所有示例源代码的原因。本书中的所有示例都与LiveCD中的内容完全匹配。

只需使用VirtualBox或VMware运行随附的LiveCD,然后使用该书继续阅读。如果你没有CD,可以从No Starch提供的torrent下载(从他们的网站链接)

答案 3 :(得分:1)

gcc的输出是否不同无关紧要,唯一改变的是内存地址;另外,你说你用VM运行它,这意味着你将获得的内存是虚拟内存,尝试启动iso并直接运行它,它几乎是一样的。

https://www.youtube.com/watch?v=pIN7oFkz5rM