Показать сообщение отдельно

  #2  
Старый 08.07.2015, 12:37
KIR@PRO
Постоянный
Регистрация: 26.12.2007
Сообщений: 353
Провел на форуме:
905389

Репутация: 332
По умолчанию

И так, коли за это время не поступило даже одного вопроса (не считая yarbabin), я решил расширить критерии.

Теперь используем следующие ОС: XP/Vista/7/8/10

И архитектуры: x32/x64

Приведу пример:

Цитата:
Сообщение от None  
ОС:
Windows XP (x32)
Системный вызов:
Код:
NTSTATUS ZwTerminateProcess(
  _In_opt_ HANDLE   ProcessHandle,
  _In_     NTSTATUS ExitStatus
);
Вызов:
Код:
ExitStatus equ 0x12345678
push ExitStatus
push -1            ;ProcessHandle
push 0                ;любое значение главное занять 4 байта =)
push 0                ;по сути здесь должен быть адрес возврата, куда будет передано управление после выполнения ядром своих функций. Но Ядро в этом системном вызове не проверяет это значение
mov edx,esp       ;адрес по которому лежит адрес возврата. Должен принадлежать стеку и не может быть нулем, проверяется ядром.
mov eax, 0x101    ;номер системного вызова ZwTerminateProcess = 0x101
sysenter
Зависимости выполнения: отсутствуют
Пример № 2:

Цитата:
Сообщение от None  
ОС:
Windows 8 (x32)
,
Windows 8.1 (x32)
Системный вызов:
Код:
NTSTATUS ZwTerminateProcess(
  _In_opt_ HANDLE   ProcessHandle,
  _In_     NTSTATUS ExitStatus
);
Вызов:
Код:
ExitStatus equ 0x12345678
push ExitStatus
push -1            ;ProcessHandle
push 0                ;любое значение главное занять 4 байта =)
push 0                ;по сути здесь должен быть адрес возврата, куда будет передано управление после выполнения ядром своих функций. Но Ядро в этом системном вызове не проверяет это значение
mov edx,esp       ;адрес по которому лежит адрес возврата. Должен принадлежать стеку и не может быть нулем, проверяется ядром.
mov eax, 0x23    ;номер системного вызова ZwTerminateProcess = 0x23
sysenter
Зависимости выполнения: отсутствуют
Как видно, с Windows XP изменился только номер системного вызова.
 
Ответить с цитированием