Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.11.09;
Скачать: CL | DM;

Вниз

Какой функции не хватает?   Найти похожие ветки 

 
@!!ex ©   (2008-09-14 21:40) [0]

Есть ехешка, она загружается dll.
в dll не хватает какой-то функции.
Ехешка падает. Как узнать, какой функции собственно не хватает?


 
Rouse_ ©   (2008-09-14 22:03) [1]

Поставь себе вот это и посмотри что имено импортирует экзешник из этой библиотеки: http://rouse.drkb.ru/winapi.php#propsheet


 
@!!ex ©   (2008-09-14 22:21) [2]

> [1] Rouse_ ©   (14.09.08 22:03)
> http://rouse.drkb.ru/winapi.php#propsheet

Спасибо!


 
Городской Шаман   (2008-09-14 22:22) [3]


> Rouse_ ©   (14.09.08 22:03) [1]


А если загрузка динамическая? Тогда только хук на API функцию GetProcAddress


 
@!!ex ©   (2008-09-14 22:33) [4]

> [1] Rouse_ ©   (14.09.08 22:03)

Чего то не понял, как посмотреть список функций?


> [3] Городской Шаман   (14.09.08 22:22)

Вроде винда ругается, если нет функции которую пытаются через GetProcAddr получить.


 
@!!ex ©   (2008-09-14 22:52) [5]

Ааа. В свойства добавляется... не сразу я это понял...


 
wicked ©   (2008-09-14 23:24) [6]


> > [3] Городской Шаман   (14.09.08 22:22)
>
> Вроде винда ругается, если нет функции которую пытаются
> через GetProcAddr получить.

не ругается, а возвращает ошибку
а ругаться в этом случае должно уже само приложение


 
@!!ex ©   (2008-09-15 14:35) [7]

Мда.. не ругается...
как поставить хук на GetProcAddr?


 
Rouse_ ©   (2008-09-15 14:51) [8]


> А если загрузка динамическая? Тогда только хук на API функцию
> GetProcAddress

Зачем? Пишем махонький лоадер и сплайсим точку входа в исходную процедуру.


 
@!!ex ©   (2008-09-15 14:55) [9]

> [8] Rouse_ ©   (15.09.08 14:51)

Эм... о сплайсинге я только слышал...
где об этом почитать мона?


 
KilkennyCat ©   (2008-09-15 14:56) [10]

Сплайсинг — созревание информационной РНК (мРНК) у эукариот, в процессе которого путём биохимических реакций с участием РНК и белков из иРНК удаляются участки, не кодирующие белок (интроны) и соединяются друг с другом экзоны. Таким образом предшественник иРНК превращается в зрелую иРНК, с которой считываются (транслируются) белки клетки.


 
Vlad Oshin ©   (2008-09-15 15:08) [11]

ApiHookTools.pas , поищи такой модуль, в инете есть и примеры


 
@!!ex ©   (2008-09-15 15:11) [12]

> [10] KilkennyCat ©   (15.09.08 14:56)

Очень познавательно! Спасибо. :))


> [11] Vlad Oshin ©   (15.09.08 15:08)

Гугль ничего не знает...


 
Vlad Oshin ©   (2008-09-15 15:15) [13]

216 кб, с примером. Могу выслать


 
@!!ex ©   (2008-09-15 15:16) [14]

нашел:
http://www.dotfix.net/module.php?module=@6e786b366a6a70736a6a5f6d725e6c646268676228


 
@!!ex ©   (2008-09-15 15:19) [15]

> [13] Vlad Oshin ©   (15.09.08 15:15)

Высылай! А то ссылка битая.


 
Vlad Oshin ©   (2008-09-15 15:19) [16]

также тут можно глянуть,
http://www.codenet.ru/progr/delphi/stat/api-hook.php


 
Vlad Oshin ©   (2008-09-15 15:20) [17]

там кстати и ссылка нормальная и оно вроде, тот самый файл, т.е.


 
@!!ex ©   (2008-09-15 17:16) [18]

Сделал как в примере:
library LogerDLL;

uses
 Windows,
 ExtendedAPIFunctions,
 apihooktools;

{$R *.res}
const
 MutexName="__API_HOOK";

var
 SH:HHOOK;

 SystemFunctionBridge:TFunctionRestoreData;

function NewGetProcAddress(hModule: HMODULE; lpProcName: LPCSTR): FARPROC; stdcall;
var
 Res:PChar;
begin
 UnHookCodeHook(@SystemFunctionBridge);
 MessageBox(0,lpProcName,"",0);
 Result:=GetProcAddress(hModule,lpProcName);
 SetCodeHook(SystemFunctionBridge.Address,@NewGetProcAddress,@SystemFunctionBridg e);
end;

        //обработчик сообщений
function MsgProc(code:DWORD;wParam,lparam:DWORD):DWORD;stdcall;
begin
 CallNextHookEx(SH,code,wParam,lparam);
end;

            //внедрение нашей DLL  во все GUI процессы
procedure SetWindowsHook(e:Boolean); stdcall;
var
 M:THandle;
begin
 if e then
  begin
   m:=CreateMutex(0,false,MutexName);
   if m=0 then exit;
   SH:=SetWindowsHookEx(WH_GETMESSAGE,@MsgProc,HInstance,0);
  end
      else
   UnhookWindowsHookEx(sh);
end;
                               //главный библиотечный обработчик
procedure DLLEntryPoint(dwReason:DWord);
begin
 case dwReason of
   DLL_PROCESS_ATTACH:
    begin                  
    // StopProcess(GetCurrentProcessId);
     SetWindowsHook(true);
     SetProcedureHook(GetModuleHandle("ntdll.dll"),"GetProcAddress",@NewGetProcAddres s,@SystemFunctionBridge);
    // ResumeProcess(GetCurrentProcessId);
    end;
   DLL_PROCESS_DETACH:
    begin
    // StopProcess(GetCurrentProcessId);
     SetWindowsHook(false);
     UnHookCodeHook(@SystemFunctionBridge);
     //ResumeProcess(GetCurrentProcessId);
    end;
  end;
end;

begin
  DllProc:= @DLLEntryPoint;  //устанавливаеем библиотечный обработчик
  DLLEntryPoint(DLL_PROCESS_ATTACH);
end.

MessageBox не появляется никогда...


 
@!!ex ©   (2008-09-15 17:25) [19]

LdrGetProcedureAddress... правильный адрес...
это было красиво...
Я не ожидал, что система ТАК часто вызывает эфут функцию...


 
@!!ex ©   (2008-09-15 17:48) [20]

Нет. Всетаки надо заменять GetProcAddress. только не в NtDll, а в kernel32.

Все заработало! Спасибо!



Страницы: 1 вся ветка

Текущий архив: 2008.11.09;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.01 c
6-1194968418
artkil
2007-11-13 18:40
2008.11.09
Прокси


2-1222610739
psp
2008-09-28 18:05
2008.11.09
Как подключить сервер Firebird 1.5. к Delpi 7?.


15-1221479303
Запрос
2008-09-15 15:48
2008.11.09
Запрос, максимальная дата


3-1208944407
TADOCommand
2008-04-23 13:53
2008.11.09
Зарезервировать ключ перед вставкой


15-1221592286
Городской Шаман
2008-09-16 23:11
2008.11.09
Вот Фленова ругаете, а у самих ошибка в статье.