如何在Mono.Cecil中创建导出的函数?

时间:2011-08-31 10:55:15

标签: c# mono mono.cecil kernel32

我做错了什么?我正在尝试创建LoadLibraryA的导出函数并将其注入到程序集中。

TypeReference stringType = asm.MainModule.Import(typeof(String)); 
TypeReference nativeIntType = asm.MainModule.Import(typeof(IntPtr));
ModuleReference kernel32Ref = new ModuleReference("kernel32");

asm.MainModule.ModuleReferences.Add(kernel32Ref);
MethodDefinition loadLibraryA = new MethodDefinition("LoadLibraryA", Mono.Cecil.MethodAttributes.Public |
            Mono.Cecil.MethodAttributes.HideBySig | Mono.Cecil.MethodAttributes.Static |
            Mono.Cecil.MethodAttributes.PInvokeImpl, nativeIntType);

        loadLibraryA.PInvokeInfo = new PInvokeInfo(PInvokeAttributes.NoMangle | PInvokeAttributes.CharSetAnsi
            | PInvokeAttributes.SupportsLastError | PInvokeAttributes.CallConvWinapi, "LoadLibraryA", kernel32Ref);

        loadLibraryA.Parameters.Add(new ParameterDefinition("name", Mono.Cecil.ParameterAttributes.None, stringType));

1 个答案:

答案 0 :(得分:0)

别担心,我找到了解决方案。输入点应为LoadLibrary而不是LoadLibraryA。我想知道为什么我这样做.....

我也没有这样做:

loadLibraryA.IsPreserveSig = true;

charset也需要unicode而不是ansi ...