Disassembler saját kezébe - kildekode

sandbox →

Ismerete gépi utasítások struktúrák évekig nem kötelező egy személy nevezi magát egy programozó. Persze ez nem volt mindig. Mielőtt az Advent első assembler programozás történik közvetlenül a gépi kód. Kemény munka, párosulva a nagy számú hiba. Modern engedélyezze szerelőknek (ésszerűen) lekapcsolódik a vas, a kódolási módszerét parancsokat. Mit mondhatunk a magas szintű nyelvi fordító. Ezek befolyásolják a bonyolultsága a végrehajtása és az egyszerűség, amellyel a programozó lehetővé teszi, hogy konvertálni a forráskód egy sorozata gépi utasítások (és átalakítani, kellően optimális). A programozó csak akkor kell tudni, hogy a kívánt nyelvet / IDE. Tudjuk, mi a fordító átalakítja a forrás felsorolás nem szükséges.
Azok, akik érdeklődnek, hogy megnézzük egy rövid leírást gépi utasítások kódoló szerkezete, egy példa a végrehajtás és a forráskód disassembler az x86 architektúra, szívesen.

Létrehozása disassembler az x86 architektúra, bár a feladat, és nem különösebben nehéz, de mindegy meglehetősen sajátos. A programozó szükséges egy bizonyos fajta tudás - tudás, hogy a mikroprocesszor felismeri sorozata „Baitik” gépi kód. Nem minden intézmény kaphat ilyen ismeretek elégségesek, hogy írjon egy teljes értékű modern bontó - meg kell nézni magad (általában angol nyelven). Ezt a bejegyzést nem az a célja, hogy teljesen befedje a probléma létrehozásának bontó, röviden leírja, hogyan disassembler íródott x86 architektúra 32 bites utasításkészletet végrehajtási mód. Csak azt akartam rámutatni a valószínűsége esetleges pontatlanságokat fordítás bizonyos fogalmak a formális specifikáció.

parancsnoki struktúra Intel x86

parancs felépítése a következő:
• opcionális előtagok (mindegyik előtag a mérete 1 bájt)
• Kötelező parancs opkódot (1 vagy 2 bájt)
• Mod_R / M - Baitik meghatározó operandus struktúrája - nem kötelező.
• Opcionális bájt elfoglalt parancs operandusok (néha osztva egy mezőt SIB byte [Scale, Index, Base], a közvetlen és offszet).

Ön a következő előtagokat:
Az első hat módosítsa a szegmens regiszter a csapat elérésekor a memória cella.
• 0x26 - cserélje szegmens előtag ES
• 0x2E - helyett az előtag szegmens CS
• 0x36 - helyett az előtag szegmens SS
• 0x3E - helyett az előtag részes BS
• 0x64 - a helyettesítő szegmens előtag FS
• 0x65 - GS előtag helyettesítő kategóriában

• 0x0F - prefix további parancsok (néha ez nem számít valódi prefix - ebben az esetben úgy véljük, hogy a műveleti kód parancs két bájt, amelyek közül az első 0x0F)

Mindegyik előtagok változtatni a szemantikája és (vagy) a szerkezet a gépi utasítás (például, a hossza vagy kiválasztás mnemonikus).

Utasításból csapatok.
Opcode csapat néha egyedül, néha együtt előtag (ok) egyértelműen meghatározza az mnemonikot (név) csapat. A csapat sokat. És számuk nem csökken a szövődmény a modern mikroprocesszorok - új parancsok jelennek meg, és az idősebb, nem tűnnek el (visszafelé kompatibilitás). Listája műveleti kódok és parancsok velük kapcsolatban, mint általában, lehet tölteni a hivatalos gyártók honlapján mikroprocesszorok.

Byte Mod_R / M áll az alábbi területeken:

• Mod - az első két bit (értéke 0-3)
• R / M - következő három bit (egy érték 0 és 7)
• értéke MODR / M - következő három bit (egy érték 0 és 7)

Az első dolog az, hogy mozog az első két táblázat kényelmes adatszerkezet. Ugyanazon a helyen, xml-változata letölthető adattáblák, és azokat át egy gyönyörű sishnye szerkezetét. I másképp cselekedett - betöltött HTML táblázatok Excel és már ott írt egy egyszerű skriptik a VBA kapott sishny forráskódot, amely után kézi korrekció a kívánt adatszerkezet.

szétszerelés algoritmus is igen egyszerű:

• A lista előtagok használják a jelenlegi gépi utasítás
• keres az egyik a két táblázatban az érintett területen függően opkódot és generációs előtagok (modell) a cél (a kívánt) mikroprocesszor.
• megtaláltuk a rekord jellemzi listáját területeken, mint a termelés (modell) a mikroprocesszor, ahonnan már támogatja ezt a parancsot, vagy például a lista zászlók, hogy ez a csapat lehet változtatni. Mi azonban főként az érdekli, egy emlékeztető (név) parancsot, és egy lista az operandusok. Elemzése után az összes operandust talált és helyszíni byte Mod_R / M találunk a szövegben képviseletét a csapat és hosszát.

A száma operandusok változhat nullától háromig. Forrás táblázatok több mint száz fajta operandusok. Néhány operandust duplikált - ezek különböző nevek, de a folyamat Mod_R / M byte feldolgozási tevékenységek (és esetleg a következő bájt) ugyanaz.

PS:
Nem az a tény, hogy valaki olvasni ezt a bejegyzést elveszett információra van szüksége levonni belőle (bontói levelet), de minden esetben, ez a bontó tesztelt, és még egy része egy nagyobb kereskedelmi elég futófelülettel. ispodniki nyitott és szabadon terjesztik)

Kapcsolódó cikkek