这是我第一次在这里的问题混合模式DLL的本地函数的地址,所以请不要太为难我:)检索与IDA或奥利
我得到了什么:
混合模式的C#DLL,即具有C#代码进而调用在同一DLL一个本地方法,,即时通讯感兴趣
调用:
int num3 = <Module>.fn_GetBitArray((byte*)(&[email protected]), (byte*)(&$ArrayType$$$BY05E2), ref nHardwareType);
如IL
IL_0117: stind.i1
IL_0118: ldloca.s 9
IL_011a: ldloca.s 8
IL_011c: ldloca.s 7
IL_011e: call uint32 modopt([mscorlib]System.Runtime.CompilerServices.CallConvCdecl) '<Module>'::fn_GetBitArray(uint8*, uint8*, uint32* modopt([mscorlib]System.Runtime.CompilerServices.IsImplicitlyDereferenced))
像这样(ILSpy)的定义
// <Module>
[SuppressUnmanagedCodeSecurity]
[MethodImpl(MethodImplOptions.Unmanaged | MethodImplOptions.PreserveSig)]
public unsafe static extern uint fn_GetBitArray(byte*, byte*, uint*);
林不知道如何从这里继续。当我在IDA中加载时,我可以选择.NET加载器,在那里我可以看到所有的C#代码和调用,但不是“外部”函数的偏移量,然后我可以选择x86模式,但所有函数都编号通过(sub_XXXXXXXX),所以我需要偏移量。
问题: 我怎样才能知道,这个调用是如何解决的,并检索目标函数?
PS:我很确定它真的没有导入,因为没有其他DLL包含函数名字符串(写了一个快速的工具来搜索十六进制模式),所有导入都与其他东西有关。也ollydbg混淆我关于IL,正常的C/C + +罚款,但(可能作为旁边的问题)我怎么找到那里的IL函数名?
在此先感谢您的时间
格尔茨WV
有多好没有固定的偏移。该功能即时编译,每次运行程序时都会有不同的地址。该程序的作者没有使用C#,该语言被称为C++/CLI。用电话与他交谈。 –
“用电话与他交谈”wtf ?! “该程序的作者没有使用C#,该语言被称为C++/CLI”,那么为什么任何反射器都可以从它生成vb/c#代码,还有IL?为什么IDA会给出两个选择呢?本地函数仍然在一个固定的地址,即使一些表链接到它改变地址,对吗?那么如何找出合适的? “函数可以及时编译”,所以你也可以说C++部分或者什么?!?!我也没有编译任何东西,这是一个现成的程序,不,我不知道作者 – WarrantyVoider