vc++编译成英特尔机器码或中间代码吗?



我想知道vc++中的函数指针是否可以指向包含x86机器码的初始化内存块。然后我可以使用函数指针在该位置执行代码吗?

ie

void (*functionPointerToStartOfCodeSegment)(void);
functionPointerToStartOfCodeSegment = 0x4A152;
*functionPointerToStartOfCodeSegment();

这将继续执行位置0x4A152的x86代码还是会阻塞,因为它期望在该位置的中间代码?

你的首要问题:vc++编译成机器码还是中间代码?你得问ms。

但是考虑到它们针对不同的平台(至少CLR和原生x86),我猜编译器是分阶段运行的:

  • 解析vc++
  • 生成c++代码的高级"中间"表示
  • a)生成CLR代码或b)生成本地x86代码

我不确定你的主要问题和详细问题之间的联系是什么,但无论如何……

是的,您应该能够使用强制转换将vc++函数指针设置为指向任意的x86代码块。您必须确保代码遵循所有vc++调用/返回约定。如果vc++代码被编译为CLR代码,调用约定可能包括指示函数是CLR代码还是原生x86代码的方法。查看MS文档中的调用约定

最新更新