2012-03-08 2 views
1

Я занимаюсь некоторыми упражнениями, и я столкнулся с проблемой. У меня есть DLL-файл, который будет вложен в exe-файл. Я должен переопределить одну функцию из этого exe, по моей функции из DLL-файла. Я не могу вмешиваться в exe-файл, но в DLL могу. Я получил адрес функции, которую мне нужно заменить (получил его функцией GetProcAddress()), и теперь мне нужно перенаправить этот адрес на мою функцию. То, что я хочу достичь, - это когда exe вызовет функцию, он вызовет не его внутреннюю функцию, а мою функцию, из dll. Надеюсь, что я сам понял. Вот как выглядит голова функции как:Как переопределить внешнюю функцию?

int (func)(float, int); 

Я пытался сделать это так:

typedef int (*func_ptr)(float, int); 
func_ptr myFunction; 
myFunction = (*func_ptr)GetProcAddress(hModule, func_name); 
*myFunction = newFunction; 

ответ

1

Вы можете посмотреть на Detours: http://research.microsoft.com/en-us/projects/detours/ Или вручную залатать целевую функцию с перейдите к вашей замене.

+0

Да, я видел это, но на самом деле я хотел бы сделать это сам. Как я уже сказал, я делаю это для обучения – Blood

+0

Оке, я сделал это по объему. Большое спасибо! – Blood