gpt4 book ai didi

c++ - Windows:指针唯一性

转载 作者:可可西里 更新时间:2023-11-01 09:40:56 24 4
gpt4 key购买 nike

我需要在我的一个类(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com