【发布时间】:2013-07-06 05:41:20
【问题描述】:
假设我是世界上最好的超级黑客,我需要监控一个程序的行为,
我通过创建一个动态库或程序来做到这一点,它创建几个线程,然后从内存中读取字节(通过原始指针或任何其他没有函数的直接内存获取模型)。这个“应该”安全吗?因为您唯一能得到的只是一个格式错误的变量(例如,当您阅读时写入完成)?然后忽略它并再次阅读?
我总是看到有关竞争条件、死锁和其他与多线程相关的问题的文档。但它们并不总是像我希望的那样清晰,而且我还有很多未回答的问题。
如果一个线程写入一块内存,而其他线程,如 3-4,则不断读取内存(假设是非 std::atomic int 或 float)并对其执行一些线程范围的操作(如计算给定 x,y,z 向量的速度),那么这个程序将安全运行并且会有定义的行为,或者是否会有 UB,或者可能在某个时候应用程序崩溃? (也许格式错误的浮点字节相乘会导致崩溃?)
如果不安全,有没有办法“安全”地从几个线程的一块内存中获取内存内容,而无需访问目标程序内部?
【问题讨论】:
标签: c++ multithreading memory-management