如何从JMP CALL POP例程管理结构?

时间:2019-07-10 20:52:57

标签: assembly x86-64 nasm

我正在用汇编语言编写一个绑定外壳,作为代码的一部分,我需要写一个结构。由于我的最终目标是创建shellcode,因此我想避免使用空字节(0x00)。为此,我尝试执行JMP CALL POP例程,该例程通过从call

抓取参数来处理标签

我简化了代码,删除了所有绑定外壳程序组件,仅使用该部分修改了struct部分。但是,当我将数据移动到该寄存器中存储的地址(指向该结构)上的代码时,该代码会出现段错误

我正在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。我希望代码在mov语句中将16个字节中的前8个字节中放置8。相反,它会在mov语句上出现段错误。

0 个答案:

没有答案