Форум: "WinAPI";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];
ВнизПроблемы при перехвате IDispatch::Invoke Найти похожие ветки
← →
Ihor Osov'yak © (2004-07-01 00:26) [40]будет окончательный.. Через несколько дней..
← →
GuAV © (2004-07-01 00:40) [41]
> procedure SimpleHook2
> asm
> POP EAX
> MOV DWORD PTR [@@_return_addr],EAX
> ..
> CALL old__Entry
> db 0e9h // JMP disp (4)
> @@_return_addr: dd 0 // адрес возврата
> end;
Не пойдет, в код писать в винде оказывается нельзя :(
2 Ihor Osov"yak ©
Да, я понимаю, но не хочется чтобы ветка в архив упала, так что поддерживаем-с. :)
модераторы могут удалить [39] (создание путых сообщений) :)
← →
GuAV © (2004-07-01 16:18) [42]Рабочий код - пример создания процедуры в памяти (по крайней мере у меня рабочий :)
procedure Something;
begin
ShowMessage("s");
end;
procedure Something1;
begin
ShowMessage("s1");
end;
procedure Something2;
begin
ShowMessage("s2");
end;
procedure Something3;
begin
ShowMessage("s3");
end;
procedure SimpleHook2; assembler;
asm
JMP @Start
@Something_Addr: DD Something
@Something1_Addr: DD Something1
@Start:
PUSH EBX
PUSH ECX
PUSH EDX
CALL dword ptr [@Something_Addr]
POP EDX
POP ECX
POP EBX
jmp dword ptr [@Something1_Addr]
end;
type
PSimpleHook2=^TSimpleHook2;
TSimpleHook2=packed record
code1: array[1..2] of Byte;
InvokeHook: Pointer;
OldProc: Pointer;
code2: array[1..5] of Byte;
InvokeHook__addr: Pointer;
code3: array[1..5] of Byte;
OldProc__addr: Pointer;
end;
procedure TForm1.Button1Click(Sender: TObject);
type TProc=procedure;
var Hook: PSimpleHook2;
begin
New(Hook);
Move((@SimpleHook2)^,Hook^,SizeOf(TSimpleHook2));
Inc(Integer(Hook.InvokeHook__addr), Integer(Hook) - Integer(@SimpleHook2));
Inc(Integer(Hook.OldProc__addr), Integer(Hook) - Integer(@SimpleHook2));
TProc(Hook);
Hook.InvokeHook:=@Something2;
Hook.OldProc:=@Something3;
TProc(Hook);
Dispose(Hook);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
SimpleHook2;
end;
← →
GuAV © (2004-07-01 16:56) [43]...или даже так:
procedure Something2;
begin
ShowMessage("s2");
end;
procedure Something3;
begin
ShowMessage("s3");
end;
procedure SimpleHook2; assembler;
asm
PUSH EBX
PUSH ECX
PUSH EDX
CALL Something
POP EDX
POP ECX
POP EBX
jmp Something1
end;
type
PSimpleHook2=^TSimpleHook2;
TSimpleHook2=packed record
code1: array[1..4] of Byte;
InvokeHook: Pointer;
code2: array[1..4] of Byte;
OldProc: Pointer;
end;
procedure TForm1.Button1Click(Sender: TObject);
type TProc=procedure;
var Hook: PSimpleHook2;
begin
New(Hook);
Move((@SimpleHook2)^,Hook^,SizeOf(TSimpleHook2));
Hook.InvokeHook:=Pointer(Integer(@Something2)-Integer(@Hook.InvokeHook)-4);
Hook.OldProc:=Pointer(Integer(@Something3)-Integer(@Hook.OldProc)-4);
TProc(Hook);
Dispose(Hook);
end;
← →
GuAV © (2004-07-01 17:07) [44]или даже так
procedure Something2;
begin
ShowMessage("s2");
end;
procedure Something3;
begin
ShowMessage("s3");
end;
procedure SimpleHook2; assembler;
asm
PUSH EBX
PUSH ECX
PUSH EDX
CALL Something
POP EDX
POP ECX
POP EBX
jmp Something1
end;
type
PSimpleHook2=^TSimpleHook2;
TSimpleHook2=packed record
code1: array[1..4] of Byte;
InvokeHook: Pointer;
code2: array[1..4] of Byte;
OldProc: Pointer;
end;
procedure TForm1.Button1Click(Sender: TObject);
type TProc=procedure;
var Hook: PSimpleHook2;
begin
New(Hook);
Move((@SimpleHook2)^,Hook^,SizeOf(TSimpleHook2));
Hook.InvokeHook:=Pointer(Integer(@Something2)-Integer(@Hook.InvokeHook)-4);
Hook.OldProc:=Pointer(Integer(@Something3)-Integer(@Hook.OldProc)-4);
TProc(Hook);
Dispose(Hook);
end;
← →
GuAV © (2004-07-06 23:21) [45]<off>
Уезжаю завтра. Просьба прислать окончательный результат на мыло (векта имхо не доживет до моего приезда)
← →
evvcom © (2004-07-07 00:11) [46]
> Не пойдет, в код писать в винде оказывается нельзя :(
В 9x вроде так пройдет, а в NT можно, если снять защиту через VirtualProtect(Ex). И если не получится прямая запись после этого, то через WriteProcessMemory я уж точно писал.
← →
GuAV © (2004-07-07 00:58) [47]
> В 9x вроде так пройдет
У меня не пошло. Юзаю 98 - консерватизьм. записал, но выполнился старый код.
Это видел в паскале процедура кажется IntNo в unit dos...
имхо это кэш проца - я в этом еще не особо разобрался...
Страницы: 1 2 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.061 c