Otázka:
Hex-Rays Decompiler: Buffer on the stack
Geoffrey
2013-09-05 12:14:52 UTC
view on stackexchange narkive permalink

V současné době obracím ovladač systému Windows, abych mohl napsat ovladač kompatibilní s Linuxem pro kartu DVB, narazil jsem však na malý problém, který mohu obejít, ale pokud je to možné, rád bych to napravil .

Existuje funkce, jejíž část načte 256bajtový konfigurační prostor PCI do místní vyrovnávací paměti, která byla přidělena v zásobníku. Dekompilace ukazuje výstup jako:

  nepodepsaný __int16 configSpaceBuffer [128]; .... SNIP ... configSpace->vtable->tmRegisterAccess_ConfigSpace__tmIGetReg (configSpace, &adpace, 0, 4) _this->field_4A = v74; _this->field_4C = * (bez znaménka __int16 *) configSpaceBuffer; _this->field_4E = v75; _this->field_50 = v77; _this->field_52 = v76;  

Je možné opravit zjištěné funkční proměnné a místo toho zobrazit následující?

  _this->field_4A = configSpaceBuffer [0] ; _this->field_4C = configSpaceBuffer [1]; _this->field_4E = configSpaceBuffer [2]; _this->field_50 = configSpaceBuffer [6]; _this->field_52 = configSpaceBuffer [8];  
Jeden odpovědět:
Geoffrey
2013-09-05 12:39:00 UTC
view on stackexchange narkive permalink

Našel jsem řešení. Poklepejte na název proměnné (v tomto případě configSpaceBuffer ), který zobrazí okno zásobníku pro metodu, kde můžete definovat neplatné proměnné a poté je definovat jako pole.

Zde je výstup po této změně:

  _this->ConfigSpace1 = configSpaceBuffer [1]; _this->ConfigSpace0 = configSpaceBuffer [0]; _this->ConfigSpace4 = LOBYTE (configSpaceBuffer [4]); _this->ConfigSpace23 = configSpaceBuffer [23]; _this->ConfigSpace22 = configSpaceBuffer [22];  
Nepotřebujete ani definovat neplatné proměnné. Jakmile řeknete IDA, že `field_4A` je pole, automaticky odstraní neplatné proměnné.


Tyto otázky a odpovědi byly automaticky přeloženy z anglického jazyka.Původní obsah je k dispozici na webu stackexchange, za který děkujeme za licenci cc by-sa 3.0, pod kterou je distribuován.
Loading...