c++ - Windows:指针唯一性

标签 c++ windows qt

我需要在我的一个类(class)中使用一个快速的唯一 ID 来区分一个过程与另一个过程。我决定使用实例的地址来这样做。我最终得到了这样的结果(quintptr 是 Qt 定义的整数类型,用于根据平台存储具有正确大小的地址):

Foo::Foo()
: _id(reinterpret_cast<quintptr>(this))
{
 ...
}

想法是比较同一个exe的两个不同进程的输出。在 Vista(我的开发机器)上没有问题。但是在 XP 上,_id 的值在两个进程中是相同的(!)。

谁能解释一下这是为什么?如果使用这样的指针是个好主意(我认为是,我不再那么确定)?

谢谢。

最佳答案

每个进程都有自己的地址空间。在 XP 上,它们都是一样的。因此,您所看到的情况很常见:两个对象具有相同的地址,但位于两个不同的地址空间中。

事实证明,这会增加安全风险。攻击者能够猜测易受攻击的对象在内存中的位置,并利用它们。 Vista 随机化地址空间 (ASLR),这意味着两个进程更有可能将同一对象放在不同的地址。

对于您的情况,使用这样的指针不是一个好主意。只需使用进程 ID

关于c++ - Windows:指针唯一性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7441608/

相关文章:

qt - QPlainTextEdit 按行截断历史记录

c++ - 在 Windows 上使用 Qt Creator 设置缓存

c++ - 在 C++ 中定义全局数据的最佳方式是什么?

c# - 为什么我的 Windows C# 服务崩溃?

c++ - QT/C++ 类型的奇怪重载函数情况

windows - 无法联系 pgAdmin 4 服务器 :

c++ - Visual Studio C++ - 如何避免 Visual C++ Redistributable Packages?

c++ - 读取访问冲突,错误代码 0xFFFFFFFFFFFFFFFF

c++ - read() 和 getc() 有什么区别

c++ - 使用链表。为什么我的插入功能不起作用?