Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 堆栈分配随机偏移量C++;窗户_C++_Windows_Memory_Stack_Memory Address - Fatal编程技术网

C++ 堆栈分配随机偏移量C++;窗户

C++ 堆栈分配随机偏移量C++;窗户,c++,windows,memory,stack,memory-address,C++,Windows,Memory,Stack,Memory Address,首先,这是在Windows 64位上实现的。据我所知,只要输入一个函数,堆栈内存就会被分配。所以在这种情况下,整数应该在一开始就分配。由于ASLR,堆栈的位置在多个运行中会有所不同,但是我希望堆栈限制的偏移量保持不变。我编写了一个函数GetThreadStackAddresses,它获取当前线程的上下堆栈地址。然而,我注意到整数到堆栈限制的偏移也是非常随机的。Windows是否也向堆栈指针添加了随机偏移?还有什么原因可能导致这种情况?谢谢你的回答 int main() { int som

首先,这是在Windows 64位上实现的。据我所知,只要输入一个函数,堆栈内存就会被分配。所以在这种情况下,整数应该在一开始就分配。由于ASLR,堆栈的位置在多个运行中会有所不同,但是我希望堆栈限制的偏移量保持不变。我编写了一个函数
GetThreadStackAddresses
,它获取当前线程的上下堆栈地址。然而,我注意到整数到堆栈限制的偏移也是非常随机的。Windows是否也向堆栈指针添加了随机偏移?还有什么原因可能导致这种情况?谢谢你的回答

int main()
{
    int someInt = 123;

    Process::Stack stack{};
    if (!Process::GetThreadStackAddresses(GetCurrentProcess(), GetCurrentThread(), stack))
    {
        return 1;
    }
    std::cout << "stackLimit: 0x" << std::hex << std::uppercase << stack.Limit << std::endl;
    std::cout << "stackBase: 0x" << std::hex << std::uppercase << stack.Base << std::endl;
    std::cout << "someInt: (0x" << std::hex << std::uppercase << (uintptr_t)&someInt << ") = " << std::dec << someInt << std::endl;
    std::cout << "someInt Offset to Limit: 0x" << std::hex << std::uppercase << (uintptr_t)&someInt - stack.Limit << std::endl;
    std::cout << "someInt Offset to Base: 0x" << std::hex << std::uppercase << stack.Base - (uintptr_t)&someInt << std::endl;
}

显然,我们可以看到它确实如此。你的问题到底是什么?我不认为是因为我这样做。我想知道为什么会发生这种情况,我自己也看到了。ASLR正在这样做。是的,你是对的,我测试了它,我不知怎的认为ASLR只会随机化堆栈的位置,而不会随机化堆栈内分配发生的偏移
stackLimit: 0x1000FD000
stackBase: 0x100100000
someInt: (0x1000FFCCC) = 123
someInt Offset to Limit: 0x2CCC
someInt Offset to Base: 0x334

stackLimit: 0x5B3B11D000
stackBase: 0x5B3B120000
someInt: (0x5B3B11F88C) = 123
someInt Offset to Limit: 0x288C
someInt Offset to Base: 0x774

stackLimit: 0x52887FD000
stackBase: 0x5288800000
someInt: (0x52887FF9AC) = 123
someInt Offset to Limit: 0x29AC
someInt Offset to Base: 0x654