IDApro子程序分析

逆向工程 艾达 dll 职能 C#
2021-06-18 18:18:01

我正在使用 IDA 找出 DLL 中例程的参数。我浏览了有问题的例程,看到 IDA 自动为我完成了这项工作,并发表了如下评论:

 ; =============== S U B R O U T I N E =======================================
CODE:0048E5BC
CODE:0048E5BC ; Attributes: bp-based frame
CODE:0048E5BC
CODE:0048E5BC ; int __stdcall Active(int, double, double, double, char, char, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, double, double, char)

如果我想在 C# 中调用这个函数(使用 p/invoke),我想知道这个信息有多可靠?

1个回答

这不是很可靠。除了分析加载和存储的大小和类型之外,IDA 无法确定类型。例如,据我所知,鉴于它们的大小相同,IDA 不会区分指向类型的指针和整数之间的区别。除此之外,它所能做的就是传播用户输入的类型信息。我相信 Hex-Rays 反编译器会进行更高级的参数分析,但在许多情况下它也无法提取正确的函数签名。

可以从 x86 上的堆栈推送和堆栈访问中猜测参数计数,但重要的是要记住,调用约定根本不需要使用堆栈。在较少寄存器缺乏的体系结构上,由于使用寄存器而不是堆栈的更有效的调用约定,确定参数计数有点困难。

如果您想实际调用该函数,您极有可能希望对其进行比 IDA 自动提供的更详细的分析。