pwn-64和32位ROP以及system与execve的差别
作者:互联网
①:ROP位数差别
这篇文章讲的很细:
(1条消息) [CTF pwn]傻傻分不清的execve、int80、syscall、system及shellcode_漫小牛的博客-CSDN博客
核心区别就是:
对于32位和64位,要遵循各自的调用约定,32位时摆在栈空间,64位时放在rdi寄存器。
②:system与execve
参见这篇详细的讲解文章:
(1条消息) [CTF pwn]傻傻分不清的execve、int80、syscall、system及shellcode_漫小牛的博客-CSDN博客
关键点就是:
- execve(“/bin/sh”,0,0)是个系统调用,执行后,即使他发生在某个线程中,整个进程的程序也会被换掉,但进程号保留。
- system(“/bin/sh”)是个库函数,背后的系统调用是:fork + execve + waitpid,所以启动的shell是一个新的进程,老进程还在。也正因为waitpid,所以system才会卡住。
对于system的调用:以下两种方法均可以:
1. system(“/bin/sh”)
2. system(“sh”)
第一种是使用/bin下的sh,第二种是通过环境变量找sh。
标签:bin,32,system,pwn,sh,ROP,execve 来源: https://blog.csdn.net/hacker_zrq/article/details/120616853