我想知道VC ++中的函数指针是否可以指向包含x86机器代码的预初始化内存块。我可以使用函数指针在该位置执行代码吗?
即
void (*functionPointerToStartOfCodeSegment)(void);
functionPointerToStartOfCodeSegment = 0x4A152;
*functionPointerToStartOfCodeSegment();
这会继续在位置0x4A152处执行x86代码还是会因为期望该位置的中间代码而阻塞?
答案 0 :(得分:3)
您的最高级别问题: “VC ++是否可以编译成机器代码或中间代码?” 你必须问MS。
但鉴于他们针对不同的平台(至少是CLR和本机x86),我猜测编译器会分阶段运行:
我不确定你的主要问题和详细问题之间的联系是什么,但无论如何......
是的,您应该能够使用强制转换设置VC ++函数指针指向任意x86代码块。您必须确保代码遵循所有VC ++调用/返回约定。如果将VC ++代码编译为CLR代码,则调用约定可能包括用信号通知该函数是更多CLR代码或本机x86代码的方式。检查MS文档中的调用约定。