|
|
1
2
我只能猜测,但我确信您正在检查调试版本。
在调试模式下,MSVC++编译器将所有调用替换为跳转存根的调用。这意味着,每个函数都从跳转到实际函数开始,这正是你在这里面临的。
编辑: 这实际上受到链接器设置/INCREMENTAL的影响。您所描述的效果在发布版本中没有出现的原因是,如果启用了任何类型的优化,这些跳转存根就会被简单地优化掉(当然,发布版本通常都是这种情况)。 |
|
|
2
2
对于您想要的演员阵容:
从“程序数据库”切换调试信息格式以进行编辑和;在项目中继续(/ZI)到“程序数据库(/ZI)”->;属性->C/C++->;将军。我相信正是这种设置导致编译器插入跳转代码,以便调试器可以在程序运行时重建函数并对其进行热补丁。可能还会关闭“启用最小重建”。 在MSVC中检查代码的一种更简单的方法是简单地设置一个断点并检查反汇编(右键单击该行并从弹出菜单中选择“Goto反汇编”)。它用源代码注释反汇编,这样你就可以看到每一行被编译成什么。 |
|
|
3
1
如果你想查看给定编译函数的汇编和机器代码,那么向编译器提供/FAcs命令行选项并查看随后的.asm文件会更容易。 我不确定将函数指针转换为字节流的定义行为是什么——它甚至可能无法正常工作——但另一个可能的混淆来源是x86函数都是可变大小和小字节序的。 |
|
|
4
1
如果启用了增量链接,那么您看到的是
|