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

Вниз

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 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.027 c
1-1098331590
klyg
2004-10-21 08:06
2004.11.07
Поиск слова среди HTML-документов


1-1098647263
saNat
2004-10-24 23:47
2004.11.07
Формулы аля MS Equation


14-1097834341
iZEN
2004-10-15 13:59
2004.11.07
Windows Terminal Server и Ctrl + Alt + Del


4-1096470270
sidrom
2004-09-29 19:04
2004.11.07
открытие файла в приложении по умолчанию


14-1097935689
EdSin
2004-10-16 18:08
2004.11.07
Регистрация пользователей