【发布时间】:2021-06-10 22:05:42
【问题描述】:
我正在写《黑客:剥削的艺术》一书,我正在尝试与作者一起努力并亲自动手。
我下载了源代码,当我编译它们时,我得到了相同的输出 C 可执行文件。但是当我使用GDB反汇编时,它们有不同的地址和不同的反汇编代码!我执行与书中相同的命令!
顺便说一句,我已经用命令编译了:
gcc -m32 -g code.c
我使用的是 64 位 PC,我学习 x86 汇编。
那么有什么问题呢?是因为它是旧的源代码还是什么?
【问题讨论】:
-
不同版本的编译器会产生不同的结果。那本书使用了一个更旧版本的 Linux。除非您使用他们正在使用的特定版本,否则您会看到不同的结果。
-
我相信过去的一个版本的书使用的是 Ubuntu Feisty 7.04
-
godbolt.org 的编译器可以追溯到大约 gcc4.1,现在已经有几年了。 (使用
-xc在C 模式下编译。)不过,这可能没有本书那么古老。可能最大的事情是usegcc -fno-pie -no-pie,如果您使用的是默认为 PIE 的发行版,因为这是代码生成的重大变化。 -
@PeterCordes 艺术开发可追溯到 3.3.6
标签: c gcc compilation x86 reverse-engineering