我有一个没有源代码的已编译的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文件。
任何工具或任何方法吗?
更新
由于有几个要求,我需要删除一些功能:
答案 0 :(得分:2)
朋友们,这里的解决方案适合我。
<强>解决方案强>
步骤1.在例如,创建新的DLL项目在Visual Studio中
步骤2.反汇编DLL二进制文件(工具OllyDbg,IDA Pro)
步骤3.在新的DLL项目中,创建与原始函数同名的新函数。复制功能汇编代码(从步骤2)到新功能,作为内联汇编指令
步骤4.对新函数必须包含的每个函数重复步骤3
步骤5.构建DLL
示例
步骤2. Asm代码
?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大小减少了。
答案 1 :(得分:1)
您希望删除的功能也可能在内部使用DLL。由于您没有源代码,因此必须反汇编整个DLL以进行检查。
一旦进行了分析的反汇编,删除未使用的部分,组装剩余部分并将其放入DLL中应该是一个相当简单的过程。但说实话,没有合理的情况可以帮助你。 &#34;新的dll大小必须减少&#34;在本世纪,这不是一个可信的陈述。大小仅适用于深层嵌入式系统,而不适用于Windows。