C# DllImport - 参数数量不匹配

C# DllImport - number of parameters doesn't match

我尝试使用 .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。

在此先致谢并致以最诚挚的问候

马库斯

所以我查看了 func 的程序集,发现该函数只使用了 3 个参数。这就是 IDA 只识别 3 个参数的原因。

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