Привет бывалым! Есть интересная задача, у меня есть NET библиотека (COM), в ней есть всего 4 эспортных функции(DLLCanUnload, DLLRegisterServer и т.д), но как вызвать функцию, которая не перечислена в списке экспортных? То есть в нее тупо передаются несколько параметров и на выходе имеем результат. Вот кусочек кода, если поможет: Код (Text): .text:0526CCA0 CheckMEproc near ; CODE XREF: LoadGenFiles+85p .text:0526CCA0 .text:0526CCA0 var_20 = dword ptr -20h .text:0526CCA0 arg_0 = dword ptr 4 .text:0526CCA0 arg_4 = dword ptr 8 .text:0526CCA0 .text:0526CCA0 mov ecx, [ecx+8] .text:0526CCA3 sub esp, 20h .text:0526CCA6 test ecx, ecx .text:0526CCA8 jnz short loc_526CCCB .text:0526CCAA lea eax, [esp+20h+var_20] .text:0526CCAE push (offset unk_534B3FF+0AF456B1h) ; Format .text:0526CCB3 push eax ; int .text:0526CCB4 call sub_526C360 .text:0526CCB9 add esp, 8 .text:0526CCBC lea ecx, [esp+20h+var_20] .text:0526CCC0 push (offset unk_5322BFF+0AF4C241h) .text:0526CCC5 push ecx .text:0526CCC6 call __CxxThrowException@8 .text:0526CCCB .text:0526CCCB loc_526CCCB: ; CODE XREF: CheckME+8j .text:0526CCCB mov eax, [esp+20h+arg_4] .text:0526CCCF mov edx, [ecx] ; Pointer to offset of cryptoroutines .text:0526CCD1 push eax ; EAX = 0x0F .text:0526CCD2 mov eax, [esp+24h+arg_0] .text:0526CCD6 push eax ; Входные данные [b].text:0526CCD7 call dword ptr [edx+20h] ; GeNeRaTor <- Вот эту функцию мне нужно вызвать... Но как?? [/b] .text:0526CCDA add esp, 20h .text:0526CCDD retn 8 Нужная мне процедура - GeNeRaTor Заранее спасибо.
GetModuleHandle (или LoadLibrary) вернёт адрес по которому dll загрузилась, добавляй к нему своё смещение и вызывай СОМ это только для "официальных" вызовов.
Но проблема в том, что это NET, функции(GetModuleHandle и LoadLibrary) ничего не возвращают (( Я тоже так пробовал. Может я что то упустил?
maxrfon Если функция ничего не возвращает она называется процедурой. Нужно знать модель вызова, а не юзоть то хз что.
Функция может быть "завязана" на другие части COM объета. А раз объект не создан, то поведение функции, в лучшем случае, непредсказуемо.
Ну это я знаю, спасибо за напоминание, но вопрос был немного не такого характера. Вопрос в том, как ее заюзать!
Да, естественно, сначала нужно создать обьект, все это я тоже понимаю ( я не могу придумать всего лишь способ вызова из NET или пусть хотябы С++
сделай тогда вспомогательную ДЛЛ на нормальном языке, которая будет экспортировать функцию, котороя вызывает нужную неэкспортируемую функцию из нужной ДЛЛ по смещению