:Segment kayıtlarını x86-64'te nasıl yorumlayabilirim? Bu fonksiyon ile
mov 1069833(%rip),%rax # 0x2b5c1bf9ef90 <_fini+3250648>
add %fs:0x0,%rax
retq
nasıl ikinci talimat yorumlamak ve Rax eklendi öğrenmek mı?
:Segment kayıtlarını x86-64'te nasıl yorumlayabilirim? Bu fonksiyon ile
mov 1069833(%rip),%rax # 0x2b5c1bf9ef90 <_fini+3250648>
add %fs:0x0,%rax
retq
nasıl ikinci talimat yorumlamak ve Rax eklendi öğrenmek mı?
Bu kod:
mov 1069833(%rip),%rax # 0x2b5c1bf9ef90 <_fini+3250648>
add %fs:0x0,%rax
retq
bir iş parçacığı yerel değişkenin adresini döndürüyor. %fs:0x0
, TCB'nin (Thread Control Block) adresidir ve 1069833(%rip)
, değişkenin programa ya da programın yüklenme zamanında yüklenen bazı dinamik kitaplığa (çalışma zamanında yüklenen kitaplıklar) sahip olmasından dolayı, değişkenin değişkenidir. dlopen()
aracılığıyla bazı farklı kodlara ihtiyaç duyarsınız).
Bu özel Ulrich Drepper en TLS document büyük ayrıntılı olarak açıklanmıştır §4.3 ve §4.3.6 edilir.
Onların segmentli mimarisinin eski kötü günlerinden beri segmenti kayıt çağırıldım emin değilim. Doğru terimin bir seçici olduğuna inanıyorum (ama yanılıyor olabilirim).
Ancak, ben sadece fs
alanındaki ilk quadword (64 bit) de ihtiyacım var.
%fs:0x0
bit fs:0
de hafıza içeriği anlamına gelir. Jenerik add
'u (örneğin, addl
yerine) kullandığınızdan, veri genişliğini hedef %rax
'dan alacağını düşünüyorum.
Gerçek değeri almayla ilgili olarak, eski veya uzun modda olmanıza bağlı olarak değişir.
Eski modda, temel adresi almak için fs
değerini almanız ve GDT'ye (veya muhtemelen LDT'ye) bakmanız gerekir. Uzun modda, ilgili modele özgü kayıtlara bakmanız gerekir. Eğer bu noktada olursanız maalesef uzmanlık düzeyimin ötesine geçtiniz.
ben düşündüm çok, ama asıl adresi bir seçiciden nasıl alabilirim? Koşu sürecim yok, sadece çekirdek bir çöplük. –
Korkarım ki uzun moddayım. –
Evet, seçiciler dizinlerdir (örneğin LDT/GDT'yi belirten bir bayrak gibi). GDT/LDT'nin nerede olduğunu bilmek zorundasınız ve kesinlikle kayıt defterinden elde edebileceğinizden emin değilim. – paxdiablo
Eğer linux altında çalışan ediyoruz Assming [bu] (http://stackoverflow.com/questions/6611346/amd64-fs-gs-registers-in-linux) soru alakalı olabilir. arasında – user786653
Olası kopyalar [ "DS: \ [40207A \]"? ne yapar mecliste demek] (http://stackoverflow.com/questions/3819699/what-does-ds40207a-mean-in-assembly) –