이 코드 http://fivelinesofcode.blogspot.com/2014/03/how-to-translate-virtual-to-physical.html을 사용하면/proc/"pid"/ maps에서 가져온 주어진 가상 주소와 관련된 pfn을 덤프 할 수 있습니다./proc/<pid>/pagemap에서 pfn을 덤프하면 예상되는 내용이 제공되지 않습니다.
일단 PFN을 얻으면 특정 커널 모듈로 덤프합니다. 이 코드의 조각이다 : 그러나
static int write_pfn(phys_addr_t pfn)
{
struct page *p;
void *v;
int s =0,ret =0;
p = pfn_to_page((pfn) >> PAGE_SHIFT);
v = kmap(p);
DBG("Writing page %d(mapped addr=0x%lx) - pfn: 0x%lx", p,v,pfn);
s = write_vaddr(v, PAGE_SIZE);
if (s != PAGE_SIZE) {
DBG("Error sending page %d(addr=0x%lx)", s,v);
return (int) s;
ret-=1;
}
kunmap(p);
return ret;
}
, 나는 비교하면 PFN이 내용이 완전히 다른 것보다, 과정 내에서 해당 가상 주소의 실제 내용 커널 모듈 버려진 것으로 나타났습니다 . (gdb)의 "x"명령을 사용하여 프로세스 가상 주소의 내용을 덤프합니다.
아이디어가 있으십니까?
Linux 3.14.7-rt5 #1 SMP Mon Jun 23 14:55:19 CEST 2014 x86_64 GNU/Linux