在分析Metasploit的linux / x64 / shell / reverse_tcp有效载荷时,我意识到它使用值0x1007作为mmap()系统调用的prot参数。
mmap()手册页说明prot参数是PROT_NONE或以下一个或多个标志的按位OR:PROT_EXEC,PROT_READ,PROT_WRITE PROT_NONE。根据/usr/include/x86_64-linux-gnu/bits/mman.h文件,上面提到的标志分别具有值0x4,0x1,0x2和0x0。这怎么能加起来为0x1007?
系统调用签名是:
void * mmap(void * addr,size_t length,int prot,int flags,int fd,off_t offset);
我所指的代码部分是:
global _start
section .text
_start:
xor rdi,rdi
push byte +0x9
pop rax
cdq
mov dh,0x10
mov rsi,rdx
xor r9,r9
push byte +0x22
pop r10
mov dl,0x7
loadall286
答案 0 :(得分:2)
正如@MichaelPetch所述,mmap()系统调用忽略了最重要的字节。它只能通过使用mov dh,0x10和mov rsi,rdx指令为length参数赋值。