Soru:
Değişken adrese çağrı
Cream Cracker
2013-06-25 20:18:56 UTC
view on stackexchange narkive permalink

Aşağıdaki talimatlarla karşılaştım:

  mov ecx, [ebp + var_4] imul ecx, 4call dword_1423d4 [ecx]  

Biri bana bunun ne anlama geldiğini açıklar mı veya beni doğru yöne yönlendirir mi? Çağrı neden bir değişkene yapılıyor?

Bir işaretçi dizisinden başvuruya göre çağrılar mı?
@PSS ne anlama geliyor?
Iki yanıtlar:
Jason Geffner
2013-06-25 21:50:15 UTC
view on stackexchange narkive permalink

dword_1423d4 , 32 bitlik işlev işaretçilerinden oluşan global bir diziye bir göstericidir.

var_4 bu dizinin bir indeksidir.

call talimatı, dword_1423d4 işlev dizisindeki var_4 dizinindeki işlevi çağırır.

değerler doğrusal olduğunda "switch ()" ifadesinin genel bir temsilidir. Var_4, switch () 'in parametresidir, dword_1423d4 ise vaka işleyicileri tablosudur.
@peterferrie - Deneyimlerime göre, "switch" ifadeleri tipik olarak "call" yerine "jmp" kullanacak şekilde derlenir, ancak sanırım bir derleyici bazı durumlarda ikincisini seçebilir.
Jason'a katılıyorum, çağrı nedeniyle ve jmp olmaması nedeniyle (garanti edilmese de) bir geçiş ifadesi olması olası değildir. Muhtemelen özel bir işlev dağıtıcısı veya başka bir şey.
Ayrıca @JasonGeffner ile aynı fikirde. X86'da bir "call" talimatı ile uygulanan bir "switch" ifadesi (veya bu konuda gerçek bir işlev çağrısı dışında herhangi bir şey) hiç görmedim.
Bu arada, BlackHat'tan @JasonGeffner, [adınızın tanıdık geldiğini] (http://www.blackhat.com/html/bh-us-11/training/bh-us-11-training_sl-advmal.html) düşündüm. geri.
David Hoelzer
2013-07-14 03:01:37 UTC
view on stackexchange narkive permalink

Hemen akla gelen, bir IAT veya IVT'ye erişen bir tür sanallaştırma katmanıdır. Bunun bir fonksiyon işaretçisi dizisindeki bir fonksiyon vektörüne yapılan çağrı olduğu şeklindeki önceki cevaba kesinlikle katılıyorum. Ayrıca bir geçiş ifadesi gibi görünmediğine de katılıyorum. Beni kesme vektör tablosundan / adres tablosundan aşağı çeken şey bu.

Cevabınıza daha fazla ayrıntı ekler misiniz lütfen? Yukarıdaki cevaptan ne farkı var? Şu anda Jason'ın cevabına bir tebrik gibi geliyor. Eğer amaçladığınız buysa, yanındaki oy artır düğmesine tıklayarak başka bir cevapla kabul ettiğinizi gösterebilirsiniz. Ayrı bir cevap vermek gerekli değildir.
Cevabında bir kesme vektörüne veya adres tablosuna bir referansı kaçırmış olmalıyım.


Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 3.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...