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