美文网首页
vsyscall返回值

vsyscall返回值

作者: clive0x | 来源:发表于2019-02-14 21:35 被阅读0次

    对于one gadget,经常需要满足一些特定条件,如RAX 为NULL(0),x86_64能够利用的几个gadgets,如libc_csu_init,vsyscall等,只有vsyscall满足这个条件。

    刚测试了三个vsyscall的返回值,

    __NR_gettimeofday使用空参数访问情况下返回值为0,即RAX = 0

    __NR_time使用空参数访问返回值为当前时间,非0

    __NR_getcpu使用空参数访问返回值为0,rax 0。

    所以0xffffffffff600000 和0xffffffffff600800都可用于one gadget,

    0xffffffffff600400不能用于one gadget

    测试代码如下:

    #include <stdio.h>

    #include <unistd.h>

    #include <sys/time.h>

    #include <sys/types.h>

    #include <sys/syscall.h>

    int main(void) {

    int cpu,status;

        int64_t test = -1;

        status = syscall(__NR_time,NULL,NULL,NULL);

        // gettimeofday(&tv,&tz); rax=>0

        //time(&t); rax=1550144287

        //getcpu;rax=0

    asm ("mov %%rax,%0\n"

    :"=g"(test):

    );

    printf("The rax value after vsyscall is %d\n",test);

    printf("The ret value is %d\n",status);

    return 1;

    }

    相关文章

      网友评论

          本文标题:vsyscall返回值

          本文链接:https://www.haomeiwen.com/subject/sjgyeqtx.html