Как мне управлять структурой из подпрограммы JMP CALL POP? - PullRequest
0 голосов
/ 10 июля 2019

Я пишу оболочку связывания в ассемблере, и как часть кода мне нужно писать в структуру.Поскольку моей конечной целью является создание шелл-кода, я хочу избежать нулевых байтов (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.

...