[英]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.