Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 2 oy
  • 1
  • 2
  • 3
  • 4
  • 5
RTTI PE Hakkında
#1
Arkadaşlar kolay gelsin.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol dokümanında gözüme çarpan bir husus var.
Alıntı:If RTTI generation is enabled, the resulting binary includes special metadata that contains information about types (for example, class ancestry, declared fields, annotated attributes).
Burada kısaca diyor ki; RTTI oluşuyorsa eğer, tipler vs ile ilgili bilgiler binary dosya (PE) içinde bir yerlerde tutuluyor.
Benim merak ettiğim bu metadata bilgiler PE içersinde nerede tutuluyor ve nasıl bir yapısı var ?
My name is nobody.
WWW
Cevapla
#2
1200px-Portable_Executable_32_bit_Struct...ed.svg.png
Cevapla
#3
Stackoverflow'a sorduğumda;
.text section'da tutuluyor, System.TypInfo, System.Rtti unit'leri içerisindeki yapıları inceleyerek çözebilirsin fakat fazla kurcalama, bu kadar detayını bilmene gerek yok dediler. Smile
My name is nobody.
WWW
Cevapla
#4
(22-09-2017, Saat: 21:30)ismailkocacan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlStackoverflow'a sorduğumda;
.text section'da tutuluyor, System.TypInfo, System.Rtti unit'leri içerisindeki yapıları inceleyerek çözebilirsin fakat fazla kurcalama, bu kadar detayını bilmene gerek yok dediler. Smile

Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol'daki sorunuzu ben de gördüm, sanırım orada cevap verenlerin görüşlerinden benim çıkardığım sonuç bir derleyici yazmayacaksak bu bilgileri bilmemizin pratikte bir faydası yokmuş gibi bir algı olduğu yönünde... Ama hayat bu, önümüze ne çıkacağı belli mi olur  Blush

Bekir KARUL, blogunda bu konuyu etraflıca anlatmış ve konuyu iyi ele almış, umarım işine yarar. Yardımcı olması açısından diğer linklere de göz atabilirsin,
Cevapla
#5
Sizin rtti uses eklemenizle alakalı değil linker yapısı gereği form ve nesneleri için dfm data (resource) ve 
type ler için ise hiyerarşik yapısı ile (parenti de belirtilerek) virtual adresleri ile exe içerisine yazılır. 
VCL exeleri decompile ederken exenin bu şekilde derlemesinden dolayı dfm data dan formlar ve nesneleri section üzerinden ise
type adreslerini ve eventları okunarak birbiri ile ilişkilendirilir.
Deneme yapmanız için form üzerine bir buton koyun butona click eventı ekleyin ve derleyin.
Derlediğiniz exe yi bir debugger ile açıp memorye açılmış olan sectionları üzerinde butona eklediğiniz eventın ismini aratın.
Bulunan text ifade (butonun event ismi) öncesi 4 byte prosedürün virtual adresidir.
Bulduğunuz adrese breakpoint koyup debug işlemine devam edip butona tıkladığınızda bu noktada durduğunu gözlemleyebilirsiniz.
Ayakkabıyı sefaletten
Çok sonraları tanıdım
Öyle ufuklarda mı olurmuş Allah'ım
Giyer giyer koşardım
Toprağın dostluğundan
Oyuncaklar yaptım çamurdan
Tenimin rengini aldım topraktan
Sen bakma esmerliğim sonradan...





Cevapla
#6
Kim nasıl düşünür bilmiyorum, fakat bugüne kadar merak edip anlamaya, öğrenmeye çalıştığım çoğu şey doğrudan veya dolaylı bir şekilde karşıma çıktı.Mesela delphide ki reflection(RTTI) kütüphanesini de yıllar önce help'i okurken merak üzerine öğrendim.Yoğun bir şekilde de çalıştım.Yine bilmediğim bir sürü detayı vardır.Bugün pek çok framework ve Scripting araçlarında kullanılıyor.

Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol 
Şimdilik .text section'da olduğunu bilmem benim için yeterli, yapısını çözmek için ise System.pas uniti içersinde ki vmt ön eki ile başlayan negatif offset değerleri üzerinden pointer aritmetiği ile bulunabilir belki...

class function TObject.ClassInfo: Pointer;
begin
 Result := PPointer(PByte(Self) + vmtTypeInfo)^;
end;

(22-09-2017, Saat: 23:54)QuAdR Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlSizin rtti uses eklemenizle alakalı değil linker yapısı gereği form ve nesneleri için dfm data (resource) ve 
type ler için ise hiyerarşik yapısı ile (parenti de belirtilerek) virtual adresleri ile exe içerisine yazılır. 
VCL exeleri decompile ederken exenin bu şekilde derlemesinden dolayı dfm data dan formlar ve nesneleri section üzerinden ise
type adreslerini ve eventları okunarak birbiri ile ilişkilendirilir.
Deneme yapmanız için form üzerine bir buton koyun butona click eventı ekleyin ve derleyin.
Derlediğiniz exe yi bir debugger ile açıp memorye açılmış olan sectionları üzerinde butona eklediğiniz eventın ismini aratın.
Bulunan text ifade (butonun event ismi) öncesi 4 byte prosedürün virtual adresidir.
Bulduğunuz adrese breakpoint koyup debug işlemine devam edip butona tıkladığınızda bu noktada durduğunu gözlemleyebilirsiniz.

@QuAdR hocam bilgi için çok teşekkür ederim.
En yakın zamanda deneyip inceleyeceğim.
My name is nobody.
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Bağlı Liste & Undocumented API Hakkında (+25 .. +100) Tuğrul HELVACI 22 1.409 06-10-2017, Saat: 22:41
Son Yorum: ismailkocacan
  Pointer Dereferencing Hakkında. ismailkocacan 7 488 24-09-2017, Saat: 15:10
Son Yorum: uparlayan



Konuyu Okuyanlar: 1 Ziyaretçi