dlsym ile kütüphane interpozisyonu

2 Cevap php

Ben Bu uygulamaların çoğunda genellikle de çalışır, vb) (yakın gibi açık libc bazı kitaplık fonksiyonları kullanımını, (), () izlemek bağlamak için bir interpozisyonunun kitaplık yazıyorum. Ben özellikle PHP'nin MySQL modülü kullanarak, PHP ile çalıştığınızda Ancak, fonksiyonun hiçbiri bu modül içinde Libc çağrıları takip edilmiş olan (yani hiçbir connect (), hiçbir yuva (), vb.) 'Strace' gerçekleşti, sistem vb, (), (bağlamak) soket gerektirdiğini söyledi. Modülü ve libmysqlclient.so.16.0.0 ilgili 'dosya' Running hepsi dinamik bağlantılı olduğunu söyledi. Bu yüzden statik bağlantı kaynaklanan bir sorun olmamalı. Ne sorun olabilir?

Ben Fedora 11 64-bit sürümü kullanıyorum.

Teşekkür ederim.

2 Cevap

Bu statik bağlantı neden değil gibi görünüyor. Aslında, PHP dinamik diğer kütüphane ile bağlantılıdır. Sorun PHP uzantıları yükler şekilde dayanır.

PHP yükler referans çalıştırıldığında sembol sadece çözüleceğini anlamına gelir, bayraklar RTLD_LAZY ile () Dlopen arayarak uzantıları. Bu LD_PRELOAD tarafından belirtilen interpozisyonu atlar.

Bu kütüphane nedense doğrudan sistem çağrıları çağırarak olabilir mümkündür. Bu durumda bu kullanımını izlemek için (kendi programında veya ptrace()) strace kullanmak gerekiyordu.