У меня есть скомпилированный файл 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.
Какие-нибудь инструменты или методы для этого?
Обновить
Мне нужно удалить некоторые функции из-за нескольких требований:
Друзья, вот решение работает для меня.
Решение
Шаг 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 уменьшен.
Функция, которую вы хочу для удаления может также использоваться DLL внутренне. Поскольку у вас нет исходного кода, вам придется разобрать всю DLL, чтобы проверить это.
После того, как вы разберетесь с разборкой, это будет довольно простой процесс — удалить неиспользуемые детали, собрать оставшиеся и поместить их в DLL. Но, честно говоря, нет разумных обстоятельств, в которых это поможет. «Новый размер DLL должен быть уменьшен» не является правдоподобным утверждением в этом столетии. Размер имеет значение только для глубоководных систем, которые не работают под Windows.