[pso] [tema1][win]Mare performanta

Razvan Deaconescu razvand at cs.pub.ro
Wed Mar 28 21:15:58 EEST 2007


omar Chouydary wrote:
> Tocmai mi-am "resetat" masina virtuala de windows, in sensul ca am luat 
> din nou arhiva si am pus-o de la 0, doar mi-am copiat codul sursa in ea, 
> si am facut un mic test, sa vad daca de data asta adresa e buna, dar...
> In .st si .ls am urmatoarele rezultate in tabla K..Shadow fata de Ke...:
> k..->ls = 296
> k...->st = 80831b40 (deci ambele bune)
> In schimb pt shadow:
> kS..->ls = -2138441784
> kS...->st = 0 (deci null)
> (evident am initializat cu get_shadow() inainte tabela Shadow)
> So ceva e foarte ciudat... daca .st de la shadow e NULL?? cum se 
> apeleaza acele servicii sistem, mai tare... cum facem noi sa retinem 
> fostele apeluri sistem din shadow?
>  
> De asemeni, daca facem cum zicea dl. profesor, cel putin la mine imi 
> apare acel maret ecran BSOD din cauza ca am atat Ke... cat si Ke..Shadow 
> pointand catre acelasi pointer( adica daca copiez sa zicem din new_st 
> (noua mea tabela pt .st) in Ke.. si KeShadow)

Nu ar trebui sa fie nici o problema sa puncteze campul st din Ke... si 
Ke...Shadow catre aceeasi tabela.

> Any ideeas pls?

Tocmai am discutat azi la laboratorul cu Catalin Morosan. El a avut o 
problema la o tema care si pe mine m-a lasat un pic rece cand am 
vazut-o. Intr-un tarziu si-a dat seama de ce o patea. El rula de pe 
kernel-ul compilat de noi.

ATENTIE: kernel-ul ala e un model ca sa se vada functional un kernel 
compilat de Windows; din pacate, NU este acealasi kernel cu cel care 
este nativ pe Windows 2003 SP1; asta inseamna ca este o deosebire

deosebirea care ataca direct tema1 este ca, din motive necunoscute, s-a 
inversat ordinea celor doua tabele; in sursele kernel-ului (adica ce am 
compilat noi), avem prima Ke... si pe urma Ke...Shadow: 
http://cs.pub.ro/~pso/lxr/source/base/ntos/ke/kernldat.c?v=wrk-1.2#195
pe cand, daca folositi livekd pe kernel-ul initiakl (nu cel compilat de 
noi), veti observa ca ordinea e inversata:

kd> dd nt!KeServiceDescriptorTable
808a83a0  808278fc 00000000 00000128 8080374c
808a83b0  00000000 00000000 00000000 00000000
808a83c0  00002730 bf89c24d 00000000 00000000
808a83d0  f9ddb4c0 817cc9f8 81611a20 81611a20
808a83e0  00000000 00000000 019c39b0 00000000
808a83f0  e798f4f0 01c75936 00000000 00000000
808a8400  00000000 00000000 00000000 00000000
808a8410  00000000 00000000 00000000 00000000
kd> dd nt!KeServiceDescriptorTableShadow
808a8380  808278fc 00000000 00000128 8080374c
808a8390  bf9a3000 00000000 00000299 bf9a3d08
808a83a0  808278fc 00000000 00000128 8080374c
808a83b0  00000000 00000000 00000000 00000000
808a83c0  00002730 bf89c24d 00000000 00000000
808a83d0  f9ddb4c0 817cc9f8 81611a20 81611a20
808a83e0  00000000 00000000 019c39b0 00000000
808a83f0  e798f4f0 01c75936 00000000 00000000

(decupat din solutia pentru laboratorul 1: 
http://cs.pub.ro/~pso/index.php?section=Laboratoare&file=01.%20Introducere#Solutii)

Daca cineva a mai incercat asa ceva sa stie ca e posibil sa apara 
inconsistente - NU folositi kernel-ul compilat de noi la lucrul cu 
temele - cu atat mai mult la lucrul cu tema 1; o sa adaug chestia asta 
si la FAQ; nu ne-am dat seama ca o sa fie folosit modulul compilat de 
noi pentru realizarea temelor.

Razvan


More information about the pso mailing list