2016-04-02 32 views
1

Bazı paylaşılan nesnelerdeki yönergeleri inceleyerek derleme dili hakkında bir veya iki şey öğrenmeye çalışıyorum. Açıkça hedef adres Ben bu durumda biliyorum uygun fonksiyonu (değiştirilmelidirBu yeni çağrı nasıl çözülür?

af6fc | e8fcffffff call af6fdh 

: Bir call talimat başından sonra 1 byte giden bir yapıya, örneğin (hte çıktı) karşılaştım strcmp). Çünkü aynıstrcmp fonksiyon .text parçalarını yeniden yazma ihtiyacını ortadan kaldırarak .got/.plt mekanizmasını kullanarak denir aynı paylaşılan nesnenin diğer bölgelerinde bu garip buluyorum. Sonraki durumda, .dynsym ile birlikte .rel.plt tablosunu inceleyerek hedef fonksiyonu tanımlanabilir. Ama derhal adresin eskide nereye yönlendirildiğini nasıl bulabilirim? Bölümlerden herhangi birinde af6fc veya af6fd adreslerinin herhangi bir oluşumunu bulamadım, en azından hte tarafından erişilebilenler.

cevap

1

Hangi platformda olduğunuzu söylemediniz. ix86 görünüyor.

ix86 Açık'ta, -fPIC derlenmiş kodunun paylaşılan bir kitaplığa bağlanması mümkündür (bu, alt klasörleri olan bir metin kitaplığı oluşturur).

objdump -R foo.so ile dinamik yer değiştirmeler döküyorsanız, 0xaf6fd adresine karşı bir yer değiştirme olduğunu görmelisiniz. Dinamik linker, foo.so yüklendikten sonra yeniden yerleştirmenin nerede olduğunu göstermesi için 0xaf6fd numaralı telefondan 4 bayt güncelleştirecektir. Aynı strcmp işlevi .got/Plt mekanizması

Bu çağrılar olan nesnelerden gelen kullanılarak çağırılır aynı paylaşılan nesne diğer bölgelerinde

(düzgün) -fPIC derlenmiş.

İlgili konular