c - 内存溢出

标签 c memory overflow buffer

当我控制了 src 和 length 参数时,是否可以在以下情况下覆盖 eip?

memcpy(float* dest,float* src, int length)

我想应该可以覆盖 eip(?) 但是否可以用有意义的东西覆盖它?

**抱歉不清楚。覆盖EIP是指覆盖函数返回后EIP寄存器使用的返回指针,转移程序执行。

最佳答案

因为 eip 是一个寄存器,所以你不能覆盖它。您只能覆盖堆栈上的值。缓冲区溢出攻击涉及覆盖函数的返回值,从而将执行传递给可以解释为您放置在内存中某处的代码的数据。

针对您的澄清:

是的。由于调用函数时返回指针被压入堆栈,因此您可以写入该内存位置。它将在任何变量分配之上找到(假设 x86 体系结构和默认调用约定)。您可以在此处写入一个指向下一个内存位置的值,您应该在此处加载与已处理的汇编语言指令相对应的二进制数据。请注意,通过按照我所描述的方式进行操作,您已经破坏了堆栈以及程序在注入(inject)代码后继续执行的任何机会。为此,您必须将返回地址保存在堆栈的其他位置,并编写一个 shellcode 将其复制到正确的位置,然后执行返回。

我还假设 dest 参数是可控的。如果你不能把数据放在你想要的地方,它对你就没用了

关于c - 内存溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4610165/

相关文章:

c++ - 将套接字路由到另一个端口

C++:在循环中分配变量

windows - 内存映射文件是线程安全的吗

c - 限制具有多个只读文字字符串的关键字

c - 在头文件中声明一个 extern struct 模板,以便在 c 文件中全局使用

c - 如何更有效地从输入的文本中删除元音?

MATLAB 中的 Java 堆大小问题

javascript - 如何限制可拖动区域?它在顶部和左侧起作用,但在右侧和底部不起作用

html - 超出窗口宽度的溢出背景

css - chrome中的CSS溢出是什么?