【发布时间】:2012-02-29 06:09:25
【问题描述】:
我正在玩从 C# 生成本机代码。我正在使用HeapCreate 和HeapAlloc 来分配我编写x86-64 指令的可执行内存。然后我使用Marshal.GetDelegateForFunctionPointer 将其转换为.NET 委托并调用它。我能够正确地创建和调用一个返回常量值的简单函数。
问题是我无法在 VS2010 中进入该功能。当我在调用操作码的反汇编窗口中使用“step into”时,它只是简单地跳过,我永远看不到反汇编的函数。我尝试在反汇编窗口中浏览到我的可执行内存地址或在该地址添加断点,但 Visual Studio 抱怨内存不可执行。我也尝试过生成“int 3”指令,但它只会导致我的应用程序在没有警告的情况下退出(就像调用了 Environment.Exit 一样)。我用 C++ 编写了一个简单的测试程序,它使用相同的技术生成一个函数并调用它,我可以毫无问题地进入它。
如何进入我在 .NET Visual Studio 项目中分配的可执行内存块中生成的本机函数?有什么能阻止这成为可能吗? (我没有选中“只是我的代码”选项)
【问题讨论】:
标签: visual-studio-2010 debugging jit .net-assembly