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

标签 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 大小必须减小

最佳答案

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/

相关文章:

java - 来自 java 源的工件提取器

c++ - 使用 .get() 和 -> 运算符有区别吗?

c++ - Cuda 基本程序(将值写入矩阵和 std :cout does not work) ; Main function does not start

c++ - crt0 是否加载 msvcrt.dll?

c++ - Visual C++ 中的 DLL 引用

javascript - 如何在 JS 中编写打印整数位的程序

java - 包装器的 parseXXX() 用于签名二进制误解

c# - 创建一个虚拟 HWND 以传递给 Direct3D

c# - 如何将resx资源文件变成字典

java - 在 Java 中从二进制转换回其字符串值