我想解析来自 C stdlib 的函数的地址,例如malloc
在运行时从 .NET 代码(这样我就可以为我的 VM 调用这些地址的 JIT 机器代码)。我相信我应该使用LoadLibrary
和GetProcAddress
提供 kernel32.dll 但这不起作用。使用 F# 交互式我得到:
> [<DllImport("kernel32.dll", CharSet=CharSet.Ansi, SetLastError=true)>]
extern IntPtr LoadLibrary(string fileName);;
val LoadLibrary : string -> IntPtr
> [<DllImport("kernel32.dll", CharSet=CharSet.Ansi, SetLastError=true)>]
extern uint32 GetProcAddress(IntPtr hModule, string fn);;
val GetProcAddress : IntPtr * string -> uint32
> let kernel32 = LoadLibrary @"kernel32.dll";;
val kernel32 : IntPtr = 1993146368n
> let malloc = GetProcAddress(kernel32, "malloc");;
val malloc : uint32 = 0u
所以这似乎已经获得了 DLL 的句柄,但试图解析malloc
却返回了一个 NULL 指针。
我该怎么做?