我正在研究“黑客攻击艺术”。我试图遵循代码示例,但由于某种原因,汇编代码与我实际的linux上的汇编代码不匹配(在虚拟盒上作为Guest运行)。我已经确定我已经安装了32位Linux操作系统。有没有我可以传递给gcc的args,它允许我将代码编译成一个与书中给出的内容紧密匹配的程序集?
我可以很好地协调本书与本书之间的代码差异。我看到他们是不是很小,但我看到的差别是鲜明的。我不知道是不喜欢运行“预配置孵化器环境”中的代码,因为这会抑制我的技能发展。
答案 0 :(得分:7)
我实际上是在同一条船上 - 在过去的一两周里,我尝试了很多方法在我的正常开发环境(LMDE)中生成类似的汇编代码,包括chroot,编译使用-m32标志,安装x86 ubuntu等,并没有真正起作用。今天我找到了http://www.nostarch.com/hackingCD.htm,我按照说明操作,并且能够在vmware工作站10中启动livecd。这就是我所做的:
我知道这并不像在主操作系统/系统中查看示例一样方便,并且您试图避免使用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并直接运行它,它几乎是一样的。