64位计算机上的缓冲区溢出和dmesg

时间:2015-05-16 22:02:41

标签: linux gcc 64-bit buffer-overflow exploit

我写了一个非常简单的程序,它有一个我想利用的缓冲区溢出漏洞。该计划如下:

#include <stdio.h>

 void
 foo(char *asd) {
     char b [2];
     memcpy(b, asd, strlen(asd));
 }

 int main(int argc, char* argv[])
 {
    foo(argv[1]);

 }

当我运行它时:

./a.out `perl -e 'print "A"x100'`

我当然得到了分段错误:

 [2]    4466 segmentation fault (core dumped)  ./a.out `perl -e 'print "A"x100'`

我不明白的是,当我运行dmesg时,我希望在发生故障时看到rip寄存器包含0x4141414141414141。相反,它包含不同的东西,如ip:7fba99a4141。最后两个字节似乎被覆盖,但无论我写多少,只要这两个字节似乎是根据dmesg写的。 另一方面,如果我使用gdb,返回的地址似乎被完全覆盖,我确实可以利用bof。为什么会出现这种差异?

0 个答案:

没有答案