对于纯C#应用来说,这是一个没有实际意义的问题,但是如果你用MC++(或其他一些“混合”语言)编写,并且你想知道一个函数是被编译成托管代码还是本机代码呢?
您可以尝试检查源代码并根据语言规则进行推断。例如,在MC++中,查找#pragma managed/#pragma unmanaged。然而,这是有风险的,因为可能有一些你不知道的语言规则。(小测验:你知道MC++将函数编译成本机代码而不是IL的所有规则吗?)

所以如果你想要更多偏执的验证。。。

  • 使用ILDasm查看函数是否实际为IL。
  • 如果它在仅托管调试时出现,则它是托管代码。所以请检查您是否正在进行互操作调试,如果不是,您看到的任何内容都是托管的。
  • 在调用堆栈上查找托管2本机标记。
  • 如果调试时实际在函数中停止,请查看反汇编。

VS显示从偏移量0开始的托管调试反汇编,例如:

int main(array<System::String ^> ^args)
{
Console::WriteLine(L
"Hello World");00000000push edi00000001push esi00000002 push ebx

标签: none

添加新评论