ltrace -SMinimal bir örneğin analizi mmapglibc 2.23’de kullanılanları göstermektedir.
Glibc 2.23, Ubuntu 16.04’de, ile birlikte latrace -Skullanılan minimal bir program üzerinde çalışıyor dlopen:
ltrace -S ./dlopen.out
gösterileri:
dlopen("libcirosantilli_ab.so", 1 <unfinished ...>
SYS_open("./x86_64/libcirosantilli_ab.so", 524288, 06267650550) = -2
SYS_open("./libcirosantilli_ab.so", 524288, 06267650550) = 3
SYS_read(3, "\177ELF\002\001\001", 832) = 832
SYS_brk(0) = 0x244c000
SYS_brk(0x246d000) = 0x246d000
SYS_fstat(3, 0x7fff42f9ce30) = 0
SYS_getcwd("/home/ciro/bak/git/cpp-cheat"..., 128) = 54
SYS_mmap(0, 0x201028, 5, 2050) = 0x7f1c323fe000
SYS_mprotect(0x7f1c323ff000, 2093056, 0) = 0
SYS_mmap(0x7f1c325fe000, 8192, 3, 2066) = 0x7f1c325fe000
SYS_close(3) = 0
SYS_mprotect(0x7f1c325fe000, 4096, 1) = 0
bu yüzden hemen + dlopençağırdığını görüyoruz .openmmap
Müthiş ltracearaç hem kütüphane aramalarını hem de sistem aramalarını izler ve bu durumda neler olup bittiğini incelemek için mükemmeldir.
Daha yakın bir analiz, opendosya tanımlayıcısını döndürdüğünü gösterir 3(sonra stdin, out ve err sonrası bir sonraki boş).
readdaha sonra bu dosya tanımlayıcısını kullanır, ancak TODO neden mmapargümanlarının dördü ile sınırlıdır ve oradaki 5. argüman olduğu için hangi fd'nin kullanıldığını göremiyoruz . straceBeklendiği gibi olduğunu onaylar 3ve evrenin düzeni geri yüklenir.
Cesur ruhlar aynı zamanda glibc koduna da girebilir, ancak mmaphızlı bir grep sonrası bulamadım ve tembelim.
GitHub'da build boilerplate ile bu minimal örnekte test edilmiştir .