LOGOUT
Býval jsem mladistvým lamerem.

Debug je náš přítel

V té úžasné době, kdy ovládání počítače pro 99% lidí nebylo jen klikání myší na ikonky, ale poctivé ťukání příkazů do příkazového řádku lidé ještě věděli, že uvnitř té krabice je nějaký procesor, který má registry a vykonává instrukce. Nikdo se nesnažil spasit svět Javou či .NETem a ti kteří místo assembleru používali Pascal byli terčem posměchu. V této skvělé době kraloval počítačům IBM PC a kompatibilním systém MS-DOS a v něm bylo možné najít program debug.exe (původně samozřejmě debug.com), o kterém tu dneska bude řeč.
Jak jsem už nastínil debug není program pro ty, kteří nejsou schopni se orientovat kdekoliv pod abstraktní úrovní java.util.Hashtable. Vychází z utility, kterou si vytvořil Tim Paterson, autor QDOSu, který později po drobných úpravách Microsoftem vešel ve známost jako MS-DOS. Tato utilita původně běžela v ROM a až následně byla překopána do podoby samostatné, v operačním systému spustitelné binárky.


debug01.png


Debug nelze podezřívat z přehnané košatosti uživatelského rozhraní. Po spuštění z DOSu se vykreslí prompt v podobě pomlčky a tím to hasne. Proto jsem také v době, kdy byl DOS mým hlavním systémem v této chvíli končil.
Když jsem navštívil plzeňský Sinclair Klub, posadil jsem se před SinclairPC a měl jen jednu disketu se systémem. Nasm prohlásil, že mu 512kB RAM rozhodně nestačí (je to peklo, co?) a tak jsem odvážně začal zkoumat, co že to ten Debug vlastně umí. Není toho málo, posuďte sami:


debug02.png


S debugem můžeme dělat v zásadě dvě věci:
  1. Psát nový kód, což je ale poněkud hardcore, protože jde o řádkové vkládání, bez možnosti návěští, takže při téměř každé zásadní změně kódu je třeba posouvat kód a měnit adresy všech skoků

  2. Upravovat existující binárky, což je naopak docela legrace a alespoň se můžeme podívat, co jak funguje



debug03.png


Pokud se rozhodneme pro to druhé, je třeba si nejdříve nahrát nějaký ten soubor do paměti. K tomu se hodí příkaz n (name), kterým vybereme soubor a l (load), kterým nahrajeme soubor do paměti. Pokud nestanovíme jinak, nahrává se binárka od offsetu 0x100. Následně si můžeme příkazem u (unassemble) disassemblovat kus nahraného souboru. Čísla za příkazem udávají od a do jakého offsetu se má disassemblovat a stejně jako všechna další čísla jsou zadávaná v hexadecimální soustavě.
Pokud si chceme zařádit v cizí binárce, můžeme tak učinit commandem a (assemble), který nám umožňuje zadávat pohodlně instrukce a sám je ukládá jako binárku přímo od zadaného offsetu.


debug04.png


Výsledek můžeme spustit příkazem g (go), který má jako parametr za rovnítkem offset od kterého chceme spouštět. Kód udělá co má, a pokud je slušný tak se po ukončení vrátíme zpět do debugu.


debug05.png


Někdy si můžeme chtít provedené změny i uložit. To se dělá příkazem w (write). V registru CX nejdříve ale musíme mít délku ukládaného souboru, jinak hrozí, že si poškodíme disk. Příkaz rcx naštěstí umí vypsat i nastavit obsah tohoto registru. Po nahrání souboru z disku registr CX již délku obsahuje, stačí si ji tedy zapamatovat.

Debug není v žádném případě tak pohodlný jako kombinace kteréhokoliv textového editoru a assembleru. Není také určený pro stejné nasazení, cílem je spíše ladění a koukání do kódu od kterého nemáme zdroják. Přesto, pokud potřebujete nacpat bordel do VideoRAM, nebo si jen tak zablbnout není co řešit – je to ten pravý nástroj!
(Kupodivu se nachází i ve všech verzích Windows včetně Visty.)

Doporučuji vytisknout a používat velmi pěkně napsaný manuál k debugu.

Keywords:MS-DOS, assembler, debug.com, debug.exe, debugging, programming, code
9. listopadu 2009 | rubrika: Retro Bits | permalink Linkuj si ! asdf.sk
Komentáře

[1] (pol ) Vloženo 09.11.2009, 09:52:43
avatar toto som teda ale naozaj nepoznal.

[2] ( ) Vloženo 09.11.2009, 10:28:41
avatar Zajimave, pod ani nad urovni nejake javy jsem se nikdy neorientoval a tohle mi prijde celkem srozumitelne. Ze nasmu nestaci 512K neni peklo, ale nestydatost, 512K RAM je podle me totiz vic nez dost.

[3] (poke ) Vloženo 09.11.2009, 11:00:56
avatar debug a edlin rulezz pro kompilaci zkus AS. :-)

[4] (poke ) Vloženo 09.11.2009, 11:09:20
avatar Debug byval taky jeden z peknych nastroju jak nenapadne modifikovat a tim i zavirovat .com i .exe soubory. Pustil jsis debug a pres rouru mu poslal nekolik dobre mirenych prikazu. A antiviraky se mohli zblaznit nebot kdo zavirovaval system? No prece komponenta samotneho systemu. ;-)

[5] (dex - WWW) Vloženo 09.11.2009, 11:36:42
avatar Pod CP/M se to jmenuje DDT, případně SDT (v československé mutaci, Slováci z VÚVT pro to měli ještě další název).
I ovládání je podobné.

[6] (Diagon Swarm - WWW) Vloženo 09.11.2009, 22:13:26
avatar Na debug bych málem zapomněl. Dal se použít i jako jednoduchý diagnostický nástroj, když bylo potřeba zjistit grafickou kartu. Stačilo:
-DC000:35

Schválně jsem zkusil zadat debug do konzole ve Win7 a už to ten příkaz nezná. Ale možná je problém v tom, že je to 64bit verze.

[7]64bit windows (Logout - WWW) Vloženo 10.11.2009, 08:20:00
avatar to swarm: pokud vim tak 64bit verze Windows neumi spoustet nativne 16bitove binarky a jelikoz je debug.exe od MSDOS 5.0 vyse stale stejny, dokonce sedi CRC souboru, tak v 64bit Windowsech neni. kdybys nahodil XP compatibility mode, tak bys mel debug mit :)

Všechna pole jsou nepovinná.
Číslo v hranatých závorkách vytvoří odkaz na daný komentář.
Komentáře komerčního a urážlivého charakteru budou smazány, stejně jako takové, které se mi prostě znelíbí.
Vaše jméno:
Váš e-mail:
URL vašich stránek:
Nadpis:
Text: