我最近买了这本书,书名是:黑客:剥削的艺术(第 2 版),它最近一直困扰着我。无论如何,使用其中一个示例 firstprog.c :
#include <stdio.h>
int main() {
int i;
for(i=0; i < 10; i++) {
// Loop 10 times.
printf("Hello, world!\n"); // put the string to the output. }
return 0; // Tell OS the program exited without errors. }
它让你用 gcc 编译它(显然 :3 ),然后使用 objdump (为此,我只使用了 gobjdump,找不到 OS X 的 objdump )将输出通过 main.: 管道输出到 grep.: 作为正则表达式并显示前 20线。然后用 gdb 调试并在 main 处中断。这是我的主要问题:所有内存地址都不同!比如书中的eip是:0x804837a。但是对于我的电脑,它是:0x100000ee8我认为这只是因为我使用的是 64 位操作系统,但是当我使用 32 位版本的 Darwin 启动时,我得到了相同的结果。如果有人知道这个问题是什么,我将不胜感激。如果这真的很愚蠢,让我休息一下,我刚满 14 岁 :)