繁体   English   中英

将地址存储到函数指针中

[英]Storing an address into a function pointer

我正在观看有关如何使用软件调用引导程序的视频 ,方法是将系统内存的起始地址分配给函数指针,然后调用它,即用于存储地址的表达式:

sysMemBootJump = (void(*)(void))(*(u32*)0x1fff0004);

“ sysMemBootJump”是函数指针。

但是我不明白的是,为什么他在将内存的地址转换为void(*)(void)之前先取消引用内存的地址?

因为“真实”入口点存储在该地址。 通过取消引用仅将其指向函数,可以将其视为指向函数的指针。

这等效于:

u32 ad = *(u32*)0x1fff0004;

这正在获取位于地址0x1fff0004

然后

sysMemBootJump = (void(*)(void))ad;

因此, 0x1fff0004是包含例程地址的单词的地址。

并注意该代码非常不可移植。 <stdint.h> ...的uintptr_t是可移植到地址/从地址uintptr_t的更可移植的整数类型。

您可以像这里一样typedef函数签名,以编写更具可读性的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM