【问题标题】:"Hacking: The Art of Exploitation" - Assembly Inconsistencies in book examples vs. my system's gcc“黑客:剥削的艺术” - 书籍示例与我系统的 gcc 中的装配不一致
【发布时间】:2014-11-21 03:58:33
【问题描述】:

我正在学习"Hacking: The Art of Exploitation"。我正在尝试遵循代码示例,但由于某种原因,汇编代码根本与我实际 Linux 上的代码不匹配(在 Virtual Box 上作为访客运行)。我已经确定我已经安装了 32 位 Linux 操作系统。是否有任何 args 可以传递给 gcc,让我将代码编译成与书中给出的非常匹配的程序集?

我会很好地协调本书之间的代码差异和我看到的如果它们是次要的,但我看到的差异是明显的。我不喜欢从“预配置的孵化器环境”运行代码,因为这会抑制我的技能发展。

【问题讨论】:

标签: gcc assembly gdb


【解决方案1】:

我实际上一直在同一条船上——在过去的一两周里,我尝试了很多方法来在我的正常开发环境 (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 启动没有任何问题

我知道这不像在您的主操作系统/系统中查看示例那样方便,并且您试图避免使用 LiveCD,但经过大量研究后,我发现这是一个非常常见问题,希望这个答案可以帮助某人。使用 LiveCD 可能并不理想,但它仍然比双启动好很多。

【讨论】:

  • 您可以使用-fno-pie -no-pie 和-mpreferred-stack-boundary=2 从现代 GCC 获得最相似的 asm(4 字节对齐而不是现代 ABI 要求的 2^4 = 16)。
【解决方案2】:

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

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

您现在使用的 GCC 可能更新很多,因此会生成截然不同(希望更好)的代码。

是否有任何参数可以传递给 gcc,让我将代码编译成与书中给出的非常匹配的程序集?

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

附:看起来这本书的第一个版本是从 2003 年开始的,而且作者不太可能为 2008 年的第二版重新构建他们的所有示例,所以不妨试试 GCC 3.3?

【讨论】:

  • 我认为一个有趣的脚注可能是运行该书中的虚拟机的一个人(应我的要求)生成了一个转储文件,该文件发布在这个较新的SO question 中的 GCC 信息GCC 显示 (Ubuntu 1:3.3.6-15ubuntu1),它是 GCC 3.3.6,它可以追溯到 Ubuntu Fiesty 7.04。
【解决方案3】:

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

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

【讨论】:

  • 我不喜欢从 LiveCD ENV 运行它,正如我在问题中所说的那样。这将抑制我的学习和技能发展。我想捕捉的是“理论”并将其应用于我手头的情况。如果我不能成功,那么阅读这本书是没有用的。
【解决方案4】:

gcc 的输出是否不同并不重要,唯一改变的是内存地址;另外,你说你是用虚拟机来运行的,也就是说你得到的内存是虚拟内存,试试启动iso直接运行,差不多。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 1970-01-01
    • 2012-06-19
    相关资源
    最近更新 更多