首页 > 解决方案 > C:如何检查内存地址是否已写入?

问题描述

C中有没有办法检查我自己的进程的内存地址是否被写入?
例如:如果我的程序接受一个放在缓冲区中的输入,我是否可以通过检查缓冲区的下一个地址是否已写入来检查输入是否溢出缓冲区?
我知道我可以检查缓冲区的下一个地址的内容并验证它是否已被修改,但是这样对我正在处理的工作不利......

我正在研究一种保护措施,以防缓冲区溢出和格式字符串错误都存在

标签: cstackmemory-addressbuffer-overflow

解决方案


我知道我可以检查缓冲区的下一个地址的内容并验证它是否已被修改,但这样对我正在处理的工作不利......

不幸的是,这是在没有平台和特定于实现的扩展的情况下使用 C 时的唯一可能性。

但是,有些 C 编译器可以生成机器代码,这些代码将在这类上下文中检测许多缓冲区溢出 - 例如,GCC 具有开关-fsanitize=undefined-fsanitize=address可以一起使用,当缓冲区溢出发生时,它将向终端输出诊断信息。它们使程序运行速度慢得多。或者,您可以使用valgrind它来运行程序,它也可以调试分配的缓冲区溢出的多种情况。


推荐阅读