簡體   English   中英

跟蹤在Linux上加載到內存中的映像的內存地址

[英]Tracing memory address for an image loaded into memory on linux

每當Linux上的映像加載到內存時,我都試圖跟蹤信息。 理想情況下,我需要

  • 過程的pid
  • 事件的時間戳,
  • 加載圖像的路徑,
  • 以及圖像在內存中的加載位置。

我已經使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM