Безопасный поиск виртуального адресного пространства с помощью NASM - PullRequest
0 голосов
/ 07 ноября 2018

В следующем коде после вызова системного вызова «доступ» в EAX присутствует 0xfffffffe. Хотя в случае успеха системный вызов 'access' возвращает 0. Здесь я пытаюсь получить доступ к памяти, которая является частью раздела данных. Тогда почему «access» возвращает 0xfffffffe?

global _start
section .text
_start:

mov eax, 0x21 ; Access system call
mov ebx, message
mov ecx, 0 ; F_OK
int 0x80

section .data
message:dd 0,0,0,0,0,0,0

Я следую нижеприведенной статье.

http://www.hick.org/code/skape/papers/egghunt-shellcode.pdf
Я копирую следующие строки со страниц № 7 и 8 статьи.
Системный вызов 'access' предпочтительнее, потому что «указатель пути является аргументом, который будет использоваться для проверка адреса. Поскольку pathname является первым аргументом, это означает, что регистр ebx должен указывать на адрес, который должен быть проверен. "

И если мы увидим в следующем коде, автор использовал системный вызов access для проверки регистра EBX. Следующий код присутствует на странице № 8 статьи.

mov ebx, 0x50905090
xor ecx, ecx
mul ecx
или дх, 0xfff
inc edx
Пуша
lea ebx, [edx + 0x4]
mov al, 0x21
int 0x80
cmp al, 0xf2
попа
JZ 0x9
cmp [edx], ebx
jnz 0xe
cmp [edx + 0x4], ebx
jnz 0xe
jmp edx

...