C#DllImport - 参数数量不匹配

时间:2016-01-11 19:00:29

标签: c# dllimport

我尝试使用.NET Reflector反转C#程序集。我在外部函数func中进行了求解,它被声明为:

[SuppressUnmanagedCodeSecurity]
public class Class
{
...
[DllImport("extern.dll")]
public static extern uint func(IntPtr a, ulong b, int c, int d, int e);
...
}

所以我用IDA打开了extern.dll并搜索了函数func。反编译看起来像这样:

int __fastcall func(__int64 a1, __int64 a2, unsigned int a3) {...}

在C#代码中,使用5个参数调用该函数:

uint ret = Class.func(this.a, b, this.c, this.d, e); 

在C#程序集中有5个参数,在外部dll中只有3个参数。所以我的问题是这如何运作? 我完全不知道5个参数如何映射到3个。

我希望有人可以帮助我,这样我就可以继续扭转外部dll。

提前致谢并提出最好的问候

马库斯

1 个答案:

答案 0 :(得分:0)

所以我查看了func的程序集,注意到函数只使用了3个参数。这就是为什么IDA只承认3个参数。

为了验证这一点,我写了一个带有5个参数的小函数,它仅使用前3个参数。然后我用5个参数调用该函数。我反编译它,结果是一样的:IDA只识别3个参数。