我有一个编译好的 dll 文件(dll 二进制文件),没有源代码。我必须从这个 dll 中删除一些函数。 Dll是用C++编写的。
例如,我有 Math.dll,其中包含 3 个函数:
int Func1(int x);
int Func2(int x, int y);
double Func3(double x, double y);
我需要获取只有一个函数的新 dll 文件:
int Func1(int x);
我所拥有的只是 Math.dll - 一个二进制 dll 文件。
有什么工具或方法可以做到这一点吗?
更新
由于几个要求,我需要删除一些功能:
- 新的 dll 仅包含我的应用程序需要的功能
- 新的 dll 大小必须减小
最佳答案
friend 们,这是适合我的解决方案。
解决方案
步骤 1. 创建新的 DLL 项目,例如在 Visual Studio 中
步骤2.反汇编DLL二进制文件(工具OllyDbg、IDA Pro)
步骤 3. 在新的 DLL 项目中创建与原始函数同名的新函数。将函数汇编代码(来自步骤 2)复制到新函数作为内联汇编指令
步骤 4. 对新 DLL 必须包含的每个函数重复步骤 3
步骤5.构建DLL
示例
第2步.汇编代码
?Func1@@YAHH@Z proc near ;GetSquaredNumber
arg_0= dword ptr 8
push ebp
mov ebp, esp
mov eax, [ebp+arg_0]
imul eax, eax
pop ebp
retn
?Func1@@YAHH@Z endp
步骤 3. 新建 DLL C++ 代码
__declspec(dllexport) int Func1(int x) // GetSquaredNumber
{
int y_res = 0;
__asm
{
mov eax, [x]
push ebp
mov ebp, esp
imul eax, eax
pop ebp
mov [y_res], eax
}
return y_res;
}
第5步.构建项目!
结果:新的 dll 仅包含我的应用程序所需的功能,并且新的 dll 大小减小了。
关于c++ - 如何从 DLL 二进制文件中删除函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27719801/