vsyscall返回值

对于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

#include

#include

#include

#include

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返回值)