long test() { volatile unsigned long a = 1; unsigned long *p = NULL; p = (unsigned long *)malloc(sizeof(unsigned long)); *p = 1; unsigned long p_phy_addr = mem_addr_vir2phy((unsigned long)p); unsigned long a_phy_addr = mem_addr_vir2phy((unsigned long)&a); FILE* fp = fopen("hello.txt", "a+"); long i = 0; while(1) { //int s1 = a, s2 = *p; //printf("===%ld %ld====", s1, s2); /* printf("pid = %5d, times = %4ld, a's addr = %p [(physical : 0x%lx) : 0x%lx\n" "p point's addr = %p q's addr = %p [(physical : 0x%lx) : 0x%lx]\n", getpid( ), i, &a, a_phy_addr, (volatile unsigned long)a, &p, p, p_phy_addr, (volatile unsigned long)*p);*/ fprintf(fp, "pid = %d, %ld, a's addr = %p [0x%lx : %ld]" ", p point addr = %p q's addr = %p [0x%lx : %ld]\n", getpid( ), i, &a, a_phy_addr, a, &p, p, p_phy_addr, (volatile unsigned long)*p); fflush(fp); sleep(1); i++; } fclose(fp); return 0; }
int main(int argc, char **argv) { int a = 0x12345678; unsigned long phy; mem_addr_vir2phy((unsigned long)&a, &phy); printf("vaddr = %p, phy = 0x%lx\n", &a, phy); printf("Enter any key to exit\n"); fgetc(stdin); return 0; }
int main(int argc, char* argv[]) { unsigned long a = 0xffbbccaa; unsigned long vir = reinterpret_cast<unsigned long>(&a); unsigned long phy = 0; fprintf(stderr, "sizeof(unsigned long):%lu, sizeof(unsigned long*):%lu\n", sizeof(unsigned long), sizeof(unsigned long*)); mem_addr_vir2phy(vir, &phy); fprintf(stderr, "1 vir:0x%lx, phy: 0x%lx getchar to continue\n", vir, phy); getchar(); a = 0x11111111; fprintf(stderr, "2 vir:0x%lx, phy: 0x%lx getchar to continue\n", vir, phy); getchar(); fprintf(stderr, "3 vir:0x%lx, phy: 0x%lx a:0x%lx\n", vir, phy, a); }
int findItByPagemap(void* addr, int nPages, int* sockFds, int nSize){ unsigned int phyAddr = -1; struct timespec timeSt1; for(int j=0; j<nPages; j++){ if( 0 != mem_addr_vir2phy((unsigned int)addr+j*0x1000, &phyAddr)){ printf("failed get phyaddr\n"); return -1; } for(int i=0; i<nSize; i++){ //printf("posionCalculateValues[i]=%x, phyAddr=%x\n", // posionCalculateValues[i], phyAddr); //if( 0 == posionCalculateValues[i] || posionCalculateValues[i] < phyAddr || posionCalculateValues[i] > phyAddr + 0x1000 ){} if( 0 == posionCalculateValues[i] ){ continue; } /*if( !( posionCalculateValues[i] >= phyAddr && posionCalculateValues[i] <= phyAddr + 0x1000 ) && !( posionValues[i] >= phyAddr && posionValues[i] <= phyAddr + 0x1000 ) ){ continue; }*/ if( !( posionCalculateValues[i] >= phyAddr && posionCalculateValues[i] <= phyAddr + 0x1000 ) ){ continue; } timeSt1.tv_sec = 0; timeSt1.tv_nsec=0; if( 0 != ioctl(sockFds[i], 0x8907, &timeSt1) ){ //printf("ioctl failed\n"); continue; } if(timeSt1.tv_sec != 0xAB5DF2C9 && timeSt1.tv_sec != 0xB0B0B0B0){ continue; } printf("%d=CalculateValue=%x, Value=%x, phyAddr=%x, tv_sec=%x\n", i, posionCalculateValues[i], posionValues[i], phyAddr, (unsigned int)timeSt1.tv_sec); return sockFds[i]; } } return -1; }