vuln函数中使用了两个syscall指令,根据rax即可知道该指令调用的是哪个系统调用 第一个syscall:与自己进行异或操作(对应xor指令),得到的结果就是0,系统调用号为0的系统调用是read 第二个syscall:给rax赋值为1(对应代码mov rax 1),系统调用号为1的系统调用是write read存在栈溢出 write能泄露数据 1 | rax = 59//对应59号系统调用-> exceve 2 | rdi = ‘/bin/sh’ 3 | rsi = 0 4 | rdx = 0
结合笔记里写到的csu部分配合srop食用 __unwind { push rbp mov rbp, rsp xor rax, rax mov edx, 400h ; count lea rsi, [rsp+buf] ; buf mov rdi, rax ; fd syscall ; LINUX - sys_read mov rax, 1 mov edx, 30h ; '0' ; count lea rsi, [rsp+buf] ; buf mov rdi, rax ; fd syscall ; LINUX - sys_write retn 主函数的结尾只有一个retn没有leave,此处函数运行结束的时候rsp是停在...