c - 检测写入字符串

标签 c string memory

有没有办法让我在不使用 mprotect(我不能使用)的情况下检测/启动对字符串的写入?

目前我只能在后续读取中检测到写入,但为时已晚(后续读取可能来自完全不同的库)。

注意:由于优化器在进程内存中四处移动字符串,将 gdb 与观察点一起使用失败。

编辑:有问题的变量是一个类成员 (char*),它包含一些元数据作为字符串的前缀。字符串是需要不可变的部分,前缀必须是可写的。我在一个类静态散列中有数百万个这样的对象,并且可以从我们代码中的几乎任何位置访问它们。

最佳答案

您可以尝试将所有写入内存的代码包装在预处理器宏中,这些宏会检查您正在使用的地址,但由于大多数人喜欢使用简单的骨骼指针(而不是封装东西的库调用),它可能会付出很多努力。

唯一的其他选择是 mprotect(2) 或 GDB,它们都使用 CPU 的特殊部分来监视地址总线以访问相关内存。

因为您也不能使用它,所以最后一个选择是将代码打印在纸上,然后坐在安静的角落里花几天时间阅读它。这通常会奏效,但大多数人都会回避这种努力(因为它看起来不像“真正的”工作 ;-)。

关于c - 检测写入字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9308240/

相关文章:

c - 在 C 中的客户端/服务器确认中使用 select()

c - Scanf() 取 0 而不是 Float 键盘输入

c - 为什么双链表中的指针追逐可以避免缓存抖动(自驱逐)?

c++ - 字符串的数据类型是什么?

php - SQLSTATE[HY000] : General error: 5 Out of memory (Needed 4194092 bytes)

c - 如何将音频事件前后 50 毫秒存储在循环缓冲区中?

javascript - 将字符串参数传递给 onclick javascript 函数

c++ - 系统::字符串转ASCII码

vba - 当我使用按钮运行宏时,由于内存不足,excel 无法完成

c++ - 使用VirtualQuery找出哪个 "file"使用内存中的某个页面