unsigned long _read_pagemap(void* addr){ #ifdef USE_FMEM return (START_ADDR+(((uintptr_t)addr)-((uintptr_t)memory)))/PAGE_SIZE; #else return read_pagemap(addr); #endif }
int main(int argc, char ** argv){ //printf("%lu\n", GET_BIT(0xA680000000000000, 63)); //return 0; if(argc!=3){ printf("Argument number is not correct!\n pagemap PID VIRTUAL_ADDRESS\n"); return -1; } if(!memcmp(argv[1],"self",sizeof("self"))){ sprintf(path_buf, "/proc/self/pagemap"); pid = -1; } else{ pid = strtol(argv[1],&end, 10); if (end == argv[1] || *end != '\0' || pid<=0){ printf("PID must be a positive number or 'self'\n"); return -1; } } virt_addr = strtol(argv[2], NULL, 16); if(pid!=-1) sprintf(path_buf, "/proc/%u/pagemap", pid); read_pagemap(path_buf, virt_addr); return 0; }