从序数理解DLL函数签名

逆向工程 dll 吉德拉 微信 pe32
2021-06-25 05:03:26

我正在尝试使用 ghidra 来反转使用的 32 位专有应用程序,mfc42.dll并且我在导入函数方面获得了混合结果。

令我惊讶的是,DLLs 不使用名称来导出ELF格式等函数,而是使用所谓的序数,并且您需要另一个文件(相应的.lib)将它们与实际名称链接起来。

在二进制中有一个特定的函数,它似乎分别调用对应于CString::Left(int)和 的序数 4129 和序数 5710 CString::Right(int)(ghidra 内部使用 XML 来跟踪对应函数 <-> 序数)。

但是,如果我检查这个函数的实际组装,似乎这些函数需要一个进一步的参数(这可以从堆栈深度值中推导出来,您可以在使用 ghidra 进行反汇编时启用该值)。显然,我正在考虑这样一个事实,即类实例是通过ecx寄存器传递的,但这与讨论无关,我对使用 stack 传递的参数感兴趣

试图反转 dll 本身,确实 ghidra 发现签名有两个参数,但很糟糕,它无法说出这些函数的实际名称是什么。

由于mfc42.dll(我认为)是一个非常标准的库,谁能向我解释发生了什么?

要添加信息,应用程序似乎使用Visual Studio编译VC6,这可以从签名推断FuncInfo是结构0x19930520

0个回答
没有发现任何回复~