2015-10-05 1 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) 
}