Как удалить функцию из двоичного файла 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 должен быть уменьшен

0

Решение

Друзья, вот решение работает для меня.

Решение
Шаг 1. Создайте новый проект DLL, например, в Visual Studio
Шаг 2. Разберите бинарный файл DLL (инструменты OllyDbg, IDA Pro)
Шаг 3. В новом проекте DLL создайте новую функцию с тем же именем, что и у исходной функции. Скопируйте код ассемблера функции (из шага 2) в новую функцию в виде встроенных инструкций по сборке.
Шаг 4. Повторите шаг 3 для каждой функции, которую должна содержать новая DLL
Шаг 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 уменьшен.

2

Другие решения

Функция, которую вы хочу для удаления может также использоваться DLL внутренне. Поскольку у вас нет исходного кода, вам придется разобрать всю DLL, чтобы проверить это.

После того, как вы разберетесь с разборкой, это будет довольно простой процесс — удалить неиспользуемые детали, собрать оставшиеся и поместить их в DLL. Но, честно говоря, нет разумных обстоятельств, в которых это поможет. «Новый размер DLL должен быть уменьшен» не является правдоподобным утверждением в этом столетии. Размер имеет значение только для глубоководных систем, которые не работают под Windows.

1

По вопросам рекламы [email protected]