2016-03-19 57 views
-1

Yapmak istediğim modülün belirttiğim modül tarafından çağrılan tüm işlevler üzerinde koşullu kesme noktası ayarlamaktır.Modül tarafından çağrılan tüm işlevlerde koşullu kesme noktası ayarlanıyor mu? (WINDBG x64)

Bunu yapmakla amacım, X modülünün x nt işlevini çağırdığı her zaman calltack'ı yazmaktır; bu nedenle, tıkanmış kodun içinde neler olup bittiğini "haritalamak" mümkün.

Giriş noktasını kırdıktan sonra, x nt işlevi üzerinde bir kesme noktası ayarlıyorum. Benim kesme noktası sürdürme sonra çarptı ve callstack

nt! fonksiyonu

moduleIspecified gibi görünür olduğu! 0x123

....

Benim fikrim yazmak için kullanabiliriz o zaman oldu

bir koşullu kesme noktası için bir kod, gibi bir şey: "IF arayan x modülü ve modül Y modülü içinde çağrı çağrısı işlevini çağırıyor.".

X64 kernel modunda izleme ve izlemenin desteklenmediğine dikkat edilmeli. Ayrıca bu yaklaşımı benim bu yaklaşıma kullandığımı karar verdiğime değindim, çünkü çağrıları statik olarak analiz ederek belirleyemedim ve adım adım analiz yapamam da mümkün değil.

Ve ayrıca: bunu başarmak için daha iyi/ideal bir yaklaşım olurdu?

Selamlar

cevap

1

Sen tam da yapamaz, ancak düşünebilirsiniz birkaç alternatif vardır.

Her şeyden önce - neden sadece Sysinternals' Process Monitor veya Rohitab's API Monitor kullanıyorsunuz?

Bunu kendi başınıza yapmaya meyilliyseniz, karşılaştığınız ilk sorunlar, çekirdek hata ayıklayıcısının ayarlayabileceği kesme noktalarının sayısı üzerinde küçük bir sınır bulunmasıdır (32 hatırladığım son numaradır). Bu sınırlama, ana bilgisayar WinDbg/kd değil, hedef bilgisayardaki çekirdek hata ayıklama bileşenine bağlı değildir. Bunu WRK'de görebilirsiniz. Ama eğer yapabilseydin, çok yavaş olurdu.

sahip ilk alternatif olmaktır ama syscall/sysenter rutin (nt!KiFastCallEntry, nt!KisystemCall64, ya da her neyse bugün) bir kesme noktası, ve komutlar vardır koydu. Dediğim gibi, derece olacak. Eğer bana inanmıyorsanız, kendiniz denemeye davetlisiniz (akıllı şart olmasa bile, sadece herhangi bir komut koymalı, hatta sadece gc, .echo'dan bahsetmemelisiniz).

Düşünebildiğim ikinci alternatif, ilgilendiğiniz sistem çağrılarını (veya syscall yordamını) kancalayan bir sürücü yazıyor. Bu, ana makine ve hedef makineler arasındaki gidiş gelişi size kazandırır. KPP'yi (PatchGuard) devre dışı bırakmak veya 32 bitlik bir makine kullanmak için hala bir hata ayıklayıcı eklemeniz gerektiğini unutmayın. ProcMon, API Monitor veya belki de xperf/WPT kullanmaktan daha karmaşıktır.

Aşırı karmaşık olanlara gitmeden önce kolay ve anlaşılır şeyleri (ProcMon/API Monitor) kullanmanızı öneririm.