Форум: "WinAPI";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];
ВнизNative API Найти похожие ветки
← →
noname © (2004-09-29 17:50) [0]При дизасме некоторых функций ntdll.dll можно увидеть код такого типа:
mov eax, 101h
mov ebx, 7FFE0300h
call ebx
Это для Nt/ZwTerminateProcess.
Если я вставлю это в свою прогу то вырабатывается исключение по адрессу 7FFE0297h на доступ к ячейке 101h. Почему?
Всё это в WinXP. В Win2k всё это сделано иначе.
← →
Игорь Шевченко © (2004-09-29 18:03) [1]
> Если я вставлю это в свою прогу то вырабатывается исключение
> по адрессу 7FFE0297h на доступ к ячейке 101h. Почему?
Потому что указатель стека еще нужен корректный
← →
n0name (2004-09-29 18:22) [2]А у меня он какой?
Я push"ом аргументы передаю.
В ntdll.dll никаких изменений с esp нет.
← →
Игорь Шевченко © (2004-09-29 18:29) [3]
> А у меня он какой?
Вот если бы ты код показал...А то я в угадайку играю.
Я, например, так делал:unit HSXPCalls;
interface
uses
Windows;
function HSNtUserCreateWindowEx (p1,p2,p3,p4,p5, X, Y, Width, Height : Integer;
hWndParent : HWND; p11,
p12,p13,p14,p15 : Integer) : HWND; stdcall;
implementation
function HSNtUserCreateWindowEx (p1,p2,p3,p4,p5, X, Y, Width, Height : Integer;
hWndParent : HWND; p11,
p12,p13,p14,p15 : Integer) : HWND; stdcall;
asm
pop ebp
mov eax,00001157h
mov edx,7FFE0300h
call edx
ret 60
end;
end.
← →
n0name (2004-09-29 18:59) [4]Извини.
program Test;
{$APPTYPE CONSOLE}
function MyZwTerminateProcess(hProc: LongWord; Code: LongWord): Integer; stdcall;
asm
pop ebp
mov eax, $101
mov eиx, $7FFE0300
call eиx
ret 8
end;
begin
MyZwTerminateProcess($FFFFFFFF, 0);
end.
Вот это всё и не работает =(
← →
Игорь Шевченко © (2004-09-29 22:20) [5]
> mov eиx, $7FFE0300
> call eиx
Что за регистр ?
← →
Игорь Шевченко © (2004-09-29 23:11) [6]Замени регистр на edx. И выкинь дизассемблер.
← →
n0name (2004-09-30 09:29) [7]eиx - ebx.
заменял на edx.
Твой пример у меня тож не работает =).
← →
Игорь Шевченко © (2004-09-30 10:11) [8]n0name (30.09.04 09:29) [7]
Тогда я не знаю, чем тебе помочь. У меня мой пример работает, WinXP Pro Russian, без SP.
Hint: при установке сервис-паков номера функций в NTDLL меняются.
← →
n0name (2004-09-30 13:04) [9]У меня работает вот так:
unit ZwTerminateProc;
interface
uses
Windows;
function ZwTerminateProcess(ProcHndl: DWORD; ExitCode: DWORD): Integer; stdcall;
implementation
function ZwTerminateProcess(ProcHndl: DWORD; ExitCode: DWORD): Integer; stdcall;
asm
push 0
push 0FFFFFFFFh
push eax
mov eax, 0101h
mov edx, 7ffe0300h
call DWORD PTR ds:[edx]
ret 8
end;
end.
Надо через DWORD по адресу 7ffe0300h.
push eax - для фейкого ret. address.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.036 c