Kérdés:
Mi a "standard" megközelítés a bináris kód ciklusának megtalálásához?
lllllllllllll
2016-02-26 07:15:25 UTC
view on stackexchange narkive permalink

Néhány x86 (32/64 bites) ELF bináris kódon dolgozom. Ezeket a bináris fájlokat a C és a C ++ programkódból állítják össze, és megpróbálom felismerni a bináris fájlok belsejében lévő hurokokat.

Újonc vagyok ezen a területen, és kíváncsi vagyok, mi a szokásos módszer a bináris kódban lévő hurok azonosítására?

Inkább statikus módszereket használok a hurokpéldányok észlelésére, mivel nem vagyok képes jól teljesítő dinamikus tesztesetek generálására.

Mit gondolsz, miért létezik szokásos módszer? Az optimalizálás meglehetősen rendetlenséget okozhat ...
@deviantfan, köszönöm. Egyetértek ezzel. Csak arra vagyok kíváncsi, hogy az emberek mikor akarják észlelni a `hurok` -t, mit fognak tenni? van valami utalás?
Ha kézbe veszi a Praktikus rosszindulatú programok elemzése című könyvet, javasoljuk, hogy olvassa el a "6. fejezet: A C-kódú konstrukciók felismerése az összeállításban" című részt. Itt elmagyarázta a C nyelv összes főbb kódkonstrukcióját, és azt, hogy hogyan lehet azonosítani őket tolatás közben.
Kicsit meglepődöm az itteni nem építő kommentek miatt. Az optimalizálás nyilvánvalóan rendetlenséget okozhat, de nem rejtheti el a hurkok struktúráját, valamint a rekurzív hívásokat.
@TaThanhDinh Ha egy optimalizálás kibontja a hurkot úgy, hogy egyáltalán nem létezik, nincs több hurkot észlelni.
@JoshuaTaylor Igazad van. Csak arra gondolok, hogy ha vannak hurkok a bináris kódban, akkor van néhány módszerünk azok felderítésére. Ha nem, akkor nem tehetjük.
Négy válaszokat:
Brendan Dolan-Gavitt
2016-02-26 19:39:05 UTC
view on stackexchange narkive permalink

A klasszikus, a fordító elméleti válasza erre a kérdésre az, hogy felépít egy vezérlési folyamatábrát, majd grafikonelemzést végez a természetes hurkok azonosítására. Úgy gondolom, hogy ennek algoritmusai megtalálhatók a Sárkánykönyvben, és összefoglaló a következő diákban található:

http://www.cs.cmu.edu /afs/cs/academic/class/15745-s03/public/lectures/L7_handouts.pdf

Megtekintheti azt is, hogy az LLVM miként hajtja végre hurokdetektálását:

http://llvm.org/docs/doxygen/html/LoopInfo_8h_source.html

A további információkkal kapcsolatos keresési kifejezések például a "természetes hurok" és a "hátsó él" ".

Ta Thanh Dinh
2016-02-26 17:01:06 UTC
view on stackexchange narkive permalink

Hasznosnak találhatja a ezt a kérdést a rekurzív függvény megtalálásáról, nagyon szép válaszok vannak rá. A bináris kódszint, az IMHO alatt, csak kevés különbség van a hurok (azaz néhány jmp azonos célhoz) és a rekurzív hívás (azaz néhány hívás ) azonos észlelésében. ).

broadway
2016-02-26 17:56:15 UTC
view on stackexchange narkive permalink

Nem hiszem, hogy létezik szokásos módszer, de az egyik megközelítés az lehet, ha valami Johnson algoritmust használunk a ciklusok észlelésére a függvény irányított grafikonján.

Megtalálhatja ennek megvalósítása olyan könyvtárakban, mint a NetworkX simple_cycles.

yaspr
2016-11-30 16:00:52 UTC
view on stackexchange narkive permalink

A hurkok bináris kódból történő felismerése nem könnyű. Sok algoritmus létezik, amelyek több grafikon adatstruktúrán alapulnak (CFG, SSA űrlap, DDG stb.). További hasznos dokumentumokat adtam meg: link1, link2, link3. Ellenőrizheti a MAQAO SSA alapú hurokérzékelőjének megvalósítását. Azt is javasoljuk, hogy ellenőrizze a DynInst kódját és dokumentációját link4.

Most megvalósíthat egy olyan összeállítási kód-analizátort, amely az ágak követésével képes felismerni az alapvető blokkokat / ciklusokat. >

  1. Szedje szét a bináris fájlt, és hajtsa végre az utasításokat.
  2. Ha feltételes ugrás lép fel (Jxx minta), ellenőrizze, hogy az ugrik-e fölé vagy alá. .
  3. Ha a fenti ugráspontok vannak, ellenőrizze a távolságot (Delta (BRANCH_ADDRESS, BRANCH_TARGET_ADDRESS)), ha a távolság nem túl nagy (meg kell határozzon meg egy korlátot), akkor alkalmazhat valamilyen elemzést az elágazási feltételről (ellenőrizze, hogy tartalmaz-e eltolt regisztert [növekmény / csökkenés]). Az elágazási feltétel elemzése egyszerű mintaillesztés lehet:

      1. példa: TESZT X, X Jxx X 2. példa: CMP X, X Jxx X 3. példa: DEC X Jnz X 

Ha minden bebizonyosodik, kaptál magadnak egy alapblokkot, amely nagy valószínűséggel hurok lesz.

  1. Ha az ugrás az alábbi pontokra mutat, annak valószínűsége, hogy része lesz egy hurokvezérlő struktúrának, kevésbé valószínű. Ezért figyelmen kívül hagyhatja, és folytathatja a következő utasítással.

Ha további szőrös részletekre van szüksége, szívesen adok tovább;)

Köszönöm yaspr. Nagyra értékelem a részletes információkat!
Örömmel.


Ezt a kérdést és választ automatikusan lefordították angol nyelvről.Az eredeti tartalom elérhető a stackexchange oldalon, amelyet köszönünk az cc by-sa 3.0 licencért, amely alatt terjesztik.
Loading...