strace (1) 호출 (srace는 ptrace (2) API 사용)을 호출하는 것과 비슷한 방식으로 모든 mmap (2) 호출을 추적 할 수 있습니다.
mmap2(NULL, 40654, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb80e5000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb80e4000
mmap2(0x724000, 37456, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x724000
mmap2(0x72c000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x7) = 0x72c000
mmap2(0x27e000, 117704, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x27e000
mmap2(0x299000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1a) = 0x299000
mmap2(0x697000, 17008, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x697000
mmap2(0x69b000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3) = 0x69b000
당신은 각 기술자의 해당 파일 이름이 mmap에, 그리고 반환 값 (2 (오픈 (2)에서) : 당신은
strace (some command) 2> FOO
를 사용하여 본 후
mmap FOO
을 grep을 strace가 무엇인지 확인하여 자신을 시도 할 수 있습니다)는 이미지가 메모리에 매핑되는 주소입니다. 위의이에 대한
감사 충분해야하지만
는이 과정을 차단하는 방법에 따라, 당신은 또한, dlopen을에 후크를 삽입 할 수 있습니다! 나는 SystemTap을 사용하여 mmap2() 호출을 가로 채기 위해 노력할 것이다. – vsx06
불행하게도, 내가 일하고있는 커널은 특정 시스템 호출을 지원하지 않는다. (이것은 SystemTap을 위해 CONFIG_DEBUG_INFO 나 CONFIG_KPROBES를 사용할 수 없다). 따라서 SystemTap을 사용할 수 없습니다. 나는 커널 재 구축을 피하기위한 대안을 찾고 있었고 perf가 mmap()을 사용하여 사용자 공간 이미지 경로를 메모리상의 위치와 관련시키는 데 사용될 수 있음을 발견했다. 이것을 달성하기 위해 perf를 사용하는 방법에 대한 조언이 있습니까? – vsx06