【发布时间】:2012-04-03 00:33:40
【问题描述】:
我在使用 C# 时遇到问题,我想在我的代码中获取方法的指针,但这似乎是不可能的。我需要该方法的指针,因为我想使用 WriteProcessMemory 不对其进行操作。我将如何获得指针?
示例代码
main()
{
function1();
function2();
}
function1()
{
//get function2 pointer
//use WPM to nop it (I know how, this is not the problem)
}
function2()
{
Writeline("bla"); //this will never happen because I added a no-op.
}
【问题讨论】:
-
这不是有效的 C# 代码。你想做什么?
-
似乎与这个问题here 相似(非常)。它也可能对您有所帮助。
-
您以(完全)错误的方式处理问题。为什么要不操作该方法?你可以这样做——但不同,取决于你的调用代码。
-
由于 C# 是一种 JITted 语言,因此在您询问时,该函数的代码可能不存在。您的修补程序也可能会干扰 CLR,因为它还会玩有趣的游戏以进行 GC。使用调试 API 代替修补。
-
@RaymondChen:实际上您可以使用 Marshal.GetFunctionPointerForDelegate,(在 PInvoke 机制期间内部使用,因此您可以从非托管代码中获取到 C# 的回调) - 如果不是,这会强制方法的 JIT已经编译。但这不是重点。 user1276333 正在做的是一个坏主意 - JITted 代码是不可预测的,不应该被弄乱。