[英]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.