Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
3-1097181854
GanibalLector
2004-10-08 00:44
2004.11.07
VARCHAR(15000) ???


14-1097832119
}|{yk
2004-10-15 13:21
2004.11.07
Программа составления генеалогий


4-1096690969
MaxN
2004-10-02 08:22
2004.11.07
разрешение экрана


1-1098348907
ljurik
2004-10-21 12:55
2004.11.07
Как узнать тип поинтера


8-1091926499
Andry
2004-08-08 04:54
2004.11.07
Свет в GLScene





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский