如何从DLL二进制文件中删除函数

时间:2014-12-31 10:28:04

标签: c++ dll binary decompiling disassembly

我有一个没有源代码的已编译的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大小

2 个答案:

答案 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。