c - 关于栈溢出的练习

标签 c stack-overflow

我正在尝试学习堆栈溢出,但我在练习时遇到了问题。在易受攻击的程序中,必须接收我的 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/

相关文章:

c - 将我的 "Defines"添加到 C 中的枚举中

c - 使用 set-user-ID-on-execution 选项的可执行文件不会设置有效的 uid

c - 如何从 C 列表中删除值 a 并按元素搜索?

swift - SKAction runBlock 似乎没有按预期工作

c# - 计算量大导致栈溢出错误

c - 有没有一种方法可以将一个值从一个函数传输到主函数以进行循环?

c - 递归段错误和 StackGuard

java堆栈溢出错误?

c++ - 循环抛出 "parser stack overflow, program too complex"的编译时间

c++ - 从 C++ 代码调用 C 函数