我正在编写一个在进程中运行的加载项。我能够可靠地发现已在该进程中加载的 DLL 的内存地址。偏移处的内存清楚地显示了一个“MZ”DOS 头和一个“PE”头。后来,似乎有导出函数的名称等。这就像加载的 DLL 一样走路和说话。
所以,现在,我想更多地了解 DLL 是什么,更有趣的是,我可以用它做什么。
我过去使用过 PE 实用程序,但它们总是使用基于文件的 DLL。除了在十六进制编辑器中检查进程外,如何列出内存中 DLL 的导出函数?有什么方法可以发现当前加载的基于文件的 DLL?(我对加载 dll 时发生的链接不太熟悉。)
如果我有导出函数的名称,是否只是尝试调用这些函数并猜测它们的参数和返回值?还是可以执行一些更强大的逆向工程?
给定 DLL 的起始地址和函数名,我将如何在 C# 中进行调用?