2015-10-05 89 views
1

探測我要訪問,從「開放」的glibc如文件名或文件描述符函數返回的數據如何從用戶空間的SystemTap

我嘗試

probe process("/lib*/libc.so.*").function("open") { 
    fd = $fd 
    filename = user_string($filename) 
    printf("%d %d %s %s\n",pid(),ppid(),filename,fd) 
} 

訪問返回值,但它錯誤

semantic error: unresolved target-symbol expression: identifier '$fd' at malloc.stp:3:10 source: fd = $fd ^

Pass 2: analysis failed. [man error::pass2]

回答

4

open系統調用不會採取fd說法,所以.function探頭自然不會發現它。如果您希望看到從open返回的文件描述符,則請探測.function("...").return點和$return

probe process("/lib*/libc.so.6").function("open").return { 
    fd=$return 
    path=user_string(@entry($filename)) 
    printf("open %s -> $d\n", path, fd) 
}