Я пишу оболочку связывания в ассемблере, и как часть кода мне нужно писать в структуру.Поскольку моей конечной целью является создание шелл-кода, я хочу избежать нулевых байтов (0x00).Для этого я попытался выполнить процедуру JMP CALL POP, которая обрабатывает метки путем получения параметра из call
. Я упростил свой код, чтобы удалить все компоненты оболочки связывания и использовать только часть для измененияраздел структуры.Код, однако, происходит сбой, когда я перемещаю данные в эту память по адресу, сохраненному в регистре (указывая на структуру)
Я работаю на 64-битном RHEL и использую nasm.Вся эта процедура работала, когда я просто использовал метки, но это приводило к нулевым байтам, поэтому я пробую технику JMP CALL POP.
section .text
global _start
_start:
jmp call_val
nop
call_val:
call val
data times 16 db 0
val:
pop r9
xor rax, rax
add rax, 8
mov [r9], rax
Я подтвердил, что r9 заполнен адресом моей структурыв метке данных.Регистр rax также загружен 8. Я ожидаю, что код поместит 8 в первые 8 байтов из всех 16 байтов в выражении mov.Вместо этого он вызывает ошибки в выражении mov.