C ++是否可以编译为Intel机器代码或中间代码?

时间:2011-10-07 15:58:48

标签: function visual-c++ pointers assembly x86-16

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

void (*functionPointerToStartOfCodeSegment)(void);

functionPointerToStartOfCodeSegment = 0x4A152;

*functionPointerToStartOfCodeSegment();

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

1 个答案:

答案 0 :(得分:3)

您的最高级别问题: “VC ++是否可以编译成机器代码或中间代码?” 你必须问MS。

但鉴于他们针对不同的平台(至少是CLR和本机x86),我猜测编译器会分阶段运行:

  • 解析VC ++
  • 生成C ++代码的高级“中间”表示
  • a)生成CLR代码或b)生成本机x86代码

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

是的,您应该能够使用强制转换设置VC ++函数指针指向任意x86代码块。您必须确保代码遵循所有VC ++调用/返回约定。如果将VC ++代码编译为CLR代码,则调用约定可能包括用信号通知该函数是更多CLR代码或本机x86代码的方式。检查MS文档中的调用约定。