Посл.ответ |
Сообщение |
Ранг: 20.9 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 02 июля 2007 22:19 · Личное сообщение · #1
Скачал SDK от ap0x'a. Все нориально Обычные бряки срабатывают (Setbpx)
А вот поставить на Api функцию не получается. Функция то там есть
SetAPIBreakPoint(dllName:LPSTR;apiName:LPSTR;bpxType:DWORD;bpxPlace:DW ORD;CALLBACK:DWORD):VOID
Но у меня не срабатывает
| Сообщение посчитали полезным: |
|
Ранг: 4.2 (гость) Активность: 0=0 Статус: Участник
|
Создано: 04 июля 2007 16:06 · Личное сообщение · #2
If you are setting a breakpoint to API the .dll must be loaded and it should be done like this:
PUSH offset CALLBACKFunction ;address of function which will be called (it has no input parameters)
PUSH 0 ;See SDK
PUSH 0 ;See SDK
PUSH offset szCloseHandle ; db "CloseHandle",0h
PUSH offset szKernel32 ;db "kernel32.dll",0h
CALL SetAPIBreakPoint
PUSH offset CALLBACKFunction ;address of function which will be called (it has no input parameters)
PUSH 0 ;See SDK
PUSH 0 ;See SDK
PUSH offset szCreateFile ; db "CreateFileA",0h (the name matches the name in kernel32.dll export table)
PUSH offset szKernel32 ;db "kernel32.dll",0h
CALL SetAPIBreakPoint
Does this help?
| Сообщение посчитали полезным: |
Ранг: 20.9 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 04 июля 2007 19:26 · Личное сообщение · #3
PUSH offset CALLBACKFunction ;address of function which will be called (it has no input parameters)
PUSH 0 ;See SDK
PUSH 0 ;See SDK
PUSH offset szCloseHandle ; db "CloseHandle",0h
PUSH offset szKernel32 ;db "kernel32.dll",0h
CALL SetAPIBreakPoint
А на Delphi можно??
| Сообщение посчитали полезным: |
Ранг: 4.2 (гость) Активность: 0=0 Статус: Участник
|
Создано: 04 июля 2007 21:58 · Поправил: ap0x · Личное сообщение · #4
Did you look at the samples in SDK 1.3?
procedure SetAPIBreakPoint(dllName,apiName:PChar;bpxType,bpxPlace,CALLBACK:Point er); stdcall; external 'Debugger.dll' name 'SetAPIBreakPoint';
SetAPIBreakPoint(PChar("kernel32.dll"),PChar("CloseHandle"),nil,nil,@C allbackProc);
procedure CallbackProc;
var
begin
end;
Eto можно ;)
| Сообщение посчитали полезным: |
Ранг: 20.9 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 06 июля 2007 12:33 · Личное сообщение · #5
вот код
......
ProcessInfo := InitDebug(PChar(Edit1.Text),'',PChar(ExtractFilePath(Edit1.Text)));
SetAPIBreakPoint(PChar('kernel32.dll'),PChar('GetModuleHandleA'),nil,n il,@proc);
.....
procedure proc;
begin
showmessage('good');
end;
НЕ работает!
Почему?
| Сообщение посчитали полезным: |
Ранг: 4.2 (гость) Активность: 0=0 Статус: Участник
|
Создано: 06 июля 2007 16:18 · Личное сообщение · #6
Callback processing is done within the debug loop so you need to set a breakpoint at OEP and start the debugging with DebugLoop. After the OEP bpx callback gets called then you can do what ever you want. So the debugging is not started with InitDebug, it is started with DebugLoop.
| Сообщение посчитали полезным: |
Ранг: 20.9 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 06 июля 2007 21:04 · Личное сообщение · #7
Спасибо ap0x
Без твоей помощи мне была бы
| Сообщение посчитали полезным: |