[英]Tracing memory address for an image loaded into memory on linux
每当Linux上的映像加载到内存时,我都试图跟踪信息。 理想情况下,我需要
我已经使用Linux上可用的open_exec
跟踪点设法获取了pid,时间戳和路径,但是在跟踪加载映像的内存位置时遇到了问题。 任何建议(跟踪点,标记,系统调用等)如何跟踪?
一种想法可能是以类似于strace(1)跟踪调用的方式跟踪所有mmap(2)调用(srace使用ptrace(2)API)。 您可以通过使用strace (some command) 2> FOO
然后使用grep mmap FOO
来查看看到的strace (some command) 2> FOO
来尝试一下:
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
您具有每个描述符的相应文件名(来自open(2)),mmap(2)的返回值将是映像在内存中的映射地址。
根据上面的方法,您也可以在dlopen上插入一个钩子,尽管上面的内容就足够了
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.