mmap()系统调用的prot参数怎么能是0x1007?

时间:2017-05-09 03:44:00

标签: linux assembly nasm x86-64 shellcode

在分析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    

1 个答案:

答案 0 :(得分:2)

正如@MichaelPetch所述,mmap()系统调用忽略了最重要的字节。它只能通过使用mov dh,0x10和mov rsi,rdx指令为length参数赋值。