我正在尝试学习堆栈溢出,但我在练习时遇到了问题。在易受攻击的程序中,必须接收我的 shellcode 的代码部分是:
int array[8];
index = (int) strtol(argv[1], NULL, 10);
value = (int) strtoul(argv[2], NULL, 16);
array[index] = value;
我很容易找到用于覆盖 RET 的数组索引。然后我尝试像这样在易受攻击的程序中找到返回地址的偏移量:
./victim 12 $(printf "%0512x" 0)
我尝试了很多不同的长度,但在每一个可能的长度上我都遇到了段错误。这很奇怪,因为我的书说我应该只能在保存的返回地址所在的位置出现段错误。 我是初学者,所以我可能犯了一些基本错误。谁能帮我解决这个问题? 在此先感谢您的帮助。
最佳答案
您遇到了段错误,因为您只为程序提供了一个参数,但您却在 argv[2]
上调用了 strtoul
,这是一个 NULL
指针。
关于c - 关于栈溢出的练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5849189/