![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Native API
noname © (2004-09-29 17:50:00)При дизасме некоторых функций ntdll.dll можно увидеть код такого типа:
mov eax, 101h
mov ebx, 7FFE0300h
call ebx
Это для Nt/ZwTerminateProcess.
Если я вставлю это в свою прогу то вырабатывается исключение по адрессу 7FFE0297h на доступ к ячейке 101h. Почему?
Всё это в WinXP. В Win2k всё это сделано иначе.
n0name (2004-09-30 13:04:00) [1]У меня работает вот так:
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.
Игорь Шевченко (2004-09-30 10:11:00) [2]n0name (30.09.04 09:29) [7]
Тогда я не знаю, чем тебе помочь. У меня мой пример работает, WinXP Pro Russian, без SP.
Hint: при установке сервис-паков номера функций в NTDLL меняются.
n0name (2004-09-30 09:29:00) [3]eиx - ebx.
заменял на edx.
Твой пример у меня тож не работает =).
Игорь Шевченко (2004-09-29 23:11:00) [4]Замени регистр на edx. И выкинь дизассемблер.
Игорь Шевченко (2004-09-29 22:20:00) [5]
> mov eиx, $7FFE0300
> call eиx
Что за регистр ?
n0name (2004-09-29 18:59:00) [6]Извини.
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 18:29:00) [7]
> А у меня он какой?
Вот если бы ты код показал...А то я в угадайку играю.
Я, например, так делал:
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:22:00) [8]А у меня он какой?
Я push'ом аргументы передаю.
В ntdll.dll никаких изменений с esp нет.
Игорь Шевченко (2004-09-29 18:03:00) [9]
> Если я вставлю это в свою прогу то вырабатывается исключение
> по адрессу 7FFE0297h на доступ к ячейке 101h. Почему?
Потому что указатель стека еще нужен корректный