你可以反编译ac dll使用pinvoke或使用reflection器?
如何获取方法名称和签名?
简单地说,做你想做的事情并不是一件容易的事情。 不过,您可以使用反汇编程序库(如distorm)来反汇编出口入口点的代码。 有一些可以使用的启发式,但是其中许多只能用于32位调用约定( __stdcall
和__cdecl
)。 就我个人而言,我发现它的Python绑定有用,但libdasm可以做同样的事情。
任何其他具有反汇编功能的工具都是非常有价值的,比如OllyDbg或者Immunity Debugger。
注意:如果你有一个已经调用了DLL的程序,那么在调试器下运行它大部分时间是非常值得的(当然,只有当代码可以被信任,但是你的问题基本上暗示了这一点)并且设置了断点在导出的函数。 从这一点上,您可以从运行时行为和运行目标的堆栈内容中推断出更多。 但是,这仍然是棘手的 – 特别是在__cdecl
函数可能需要任意数量的参数的情况下。 在这种情况下,您必须筛选外部参照的调用程序到相应的函数,并在call
之后从堆栈清理中推断出它丢弃了多少个参数/字节。 当然,在call
之前查看push
指令也会有一定的价值,但是它需要一点经验,特别是在调用嵌套时,您必须知道哪个push
属于哪个call
。
基本上,你将不得不开发一个与你的案例相匹配的最小启发式,除非你已经许可了一个昂贵的工具( 并知道如何运用它们),而这些工具通常都是经过长时间的微调。
如果您碰巧拥有IDA Pro (或Hex-Rays插件)许可证,那么您当然应该使用该许可证。 此外, IDA的免费版虽然落后,但可以处理32位x86 PE文件(当然包括DLL),但根据您正在进行的项目,许可证可能是一个障碍(“不允许商业使用“)。
你可以使用dependency walker。
您可以使用dumpbin
或Dependency Walker查找导出的函数名称。 但要知道如何调用你真的需要一个头文件和一些文档的功能。 如果你没有这些,那么你将不得不逆向工程DLL,这是一个非常具有挑战性的任务。