1

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

IE

void (*functionPointerToStartOfCodeSegment)(void);

functionPointerToStartOfCodeSegment = 0x4A152;

*functionPointerToStartOfCodeSegment();

这会继续在位置 0x4A152 处执行 x86 代码,还是会因为在该位置期待中间代码而窒息?

4

1 回答 1

3

您的顶级问题:“VC+​​+ 是编译成机器代码还是中间代码?” 你得问MS。

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

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

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

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

于 2011-10-07T16:03:21.837 回答