在反转 elf 二进制文件时,我尝试手动计算环境变量的地址。因此我找到了这个文档,我们说在堆栈的末尾有一个 NULL DWORD。
在这种情况下,堆栈的二进制文件不是随机的,因此在 0xbffffffc (0xc0000000 - 4) 处有一个 NULL DWORD。然后通常将程序的名称指向低地址。所以一个人会读入堆栈:
./program_name\0 + NULL DWORD
但是当我使用 gdb 进行检查时,我发现了两个双字:
(gdb) x/4x 0xc0000000 - 0x10
0xbffffff0: 0x5f747365 0x00766e65 0x00000000 0x0000000
我可以看到我的程序名称有结尾(加上 \0),但它不应该以 0xbffffffc 而不是 0xbffffff8 结尾吗?有两个空双字而不是一个,我不明白为什么。