gpt4 book ai didi

c++ - 为什么我们在这里将 0 添加到双空指针?

转载 作者:太空狗 更新时间:2023-10-29 19:42:56 25 4
gpt4 key购买 nike

就上下文而言,这是从应该引导到主应用程序的引导加载程序调用的代码。此代码段来自一个带有参数 uintptr_t address 的函数,该参数指定写入主应用程序的地址。我相信 sppc 分别是堆栈指针和程序计数器。

代码如下:

sp = *((void **)address + 0);
pc = *((void **)address + 1);
start_new_application(sp, pc);

完整上下文 here

然后我去打印地址、sp 和 pc,发现以下内容:

address -> 0x08010000
sp ------> 0x20050000
pc ------> 0x080132DD

这让我很困惑。我不确定为什么 sp 行中有一个 + 0sp 行是否可以重写为:

sp = (void *)address;

并做同样的事情?

我的理解是,地址已被静态转换为双空指针,然后 sp 被赋予了地址 (0x08010000) 的解引用值,并且 pc 被赋予了地址的取消引用值 (0x08010001)。然后,在我的 printf 语句中,显示的这些值是那些 地址的取消引用值。

我的理解对吗?

最佳答案

+ 0 只是为了便于阅读。

sp = *((void **)address + 0);
pc = *((void **)address + 1);

一样
sp = *((void **)address);
pc = *((void **)address + 1);

或使用 C++ 转换和下标运算符:

sp = reinterpret_cast<void**>(address)[0];
pc = reinterpret_cast<void**>(address)[1];

Could that sp line be rewritten as:

sp = (void *)address;

不,这会使 sp 等于 address,这不是原始代码所做的。原始代码从指向的地址中提取一个void*:*address

关于c++ - 为什么我们在这里将 0 添加到双空指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57387635/

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