ltrace -S
Minimal bir örneğin analizi mmap
glibc 2.23’de kullanılanları göstermektedir.
Glibc 2.23, Ubuntu 16.04’de, ile birlikte latrace -S
kullanı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 .open
mmap
Müthiş ltrace
araç 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, open
dosya tanımlayıcısını döndürdüğünü gösterir 3
(sonra stdin, out ve err sonrası bir sonraki boş).
read
daha sonra bu dosya tanımlayıcısını kullanır, ancak TODO neden mmap
argü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 . strace
Beklendiği gibi olduğunu onaylar 3
ve evrenin düzeni geri yüklenir.
Cesur ruhlar aynı zamanda glibc koduna da girebilir, ancak mmap
hızlı bir grep sonrası bulamadım ve tembelim.
GitHub'da build boilerplate ile bu minimal örnekte test edilmiştir .