我正在用汇编语言编写一个绑定外壳,作为代码的一部分,我需要写一个结构。由于我的最终目标是创建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语句上出现段错误。