Wat is het debug exe-hulpprogramma. Werken met de Windows-opdrachtregel, het Debug-programma en het gebruik ervan
OllyDbg 2.0 is een debugger op gebruikersruimteniveau die grote populariteit heeft verworven onder gebruikers over de hele wereld. Tegenwoordig zijn er veel plugins voor OllyDbg geschreven, dus het is een plezier om ermee te werken. OllyDbg heeft goede functionaliteit, waardoor het geschikt is voor het oplossen van verschillende problemen en het onderzoeken van code van elke complexiteit. De debugger-interface is volledig aanpasbaar: achtergrond van werkvensters, letterkleur en -grootte, markering van bepaalde montage-instructies en nog veel meer.
Belangrijkste kenmerken en functies
Interface:
- De interface bestaat uit vensters voor programmacode, registers, stapel en geheugendump. De achtergrond- en lettertypekleur kunnen naar eigen wens worden ingesteld. Helemaal bovenaan bevinden zich knoppen voor snelle toegang tot de belangrijkste functies en de meest voorkomende handelingen.
Functies:
- een lijst met functies die worden gebruikt in het programma waarvan fouten worden opgespoord;
- een lijst met stringvariabelen gevonden in het programma;
- een lijst met handvatten voor bedieningselementen van het programma waarvan fouten worden opgespoord, zoals: venster, knoppen, selectievakjes, werkbalken, enz.;
Breekpunten. Het is mogelijk om meerdere breekpunten in te stellen (ook gelijktijdig):
- voor een specifieke functie;
- naar een specifiek adres;
- naar een Windows-bericht;
- uit het geheugen lezen;
- voor opname in het geheugen;
- toegang krijgen tot het geheugen (lezen en schrijven);
- naar een specifieke reeks code-instructies;
U kunt enkele specifieke voorwaarden voor breekpunten opgeven, zoals een specifieke waarde voor een opgegeven register en nog veel meer. De functie van het opnemen in een logbestand wordt ondersteund.
Stapel:
- waarden op de stapel gaan vergezeld van commentaar, waardoor het gemakkelijker wordt om functieargumenten te begrijpen.
Spoor:
- Wanneer code stap voor stap wordt uitgevoerd, vraagt de debugger vóór elke instructie om de huidige waarde van de geheugenadressen waarop bewerkingen worden uitgevoerd.
Zoeken naar waarden in het geheugen:
- Ondersteunt het zoeken naar ASCII- en Unicode-tekenreeksen, evenals naar hexadecimale waarden.
Codevenster:
- De programmacode gaat vergezeld van commentaar, zoals functienamen, hun argumenten, variabelewaarden en meer.
Een stuurprogramma is in wezen een schakel tussen het besturingssysteem, dat wil zeggen software en hardware, dat wil zeggen fysieke apparaten zoals videokaarten, printers, processors, enz. Het besturingssysteem kan basisstuurprogramma's bevatten voor de meest noodzakelijke apparaten: muis, toetsenbord, maar voor al het andere zijn nieuwe stuurprogramma's nodig.
Hoe installeer ik het stuurprogramma?
1. De eenvoudigste manier: als u een installatiebestand heeft, hoeft u het alleen maar uit te voeren en de instructies van het installatieprogramma te volgen.2.Als er geen installatieprogramma beschikbaar is en er alleen bestanden met de extensies *.inf, *.dll, *.vxt, *.sys, *.drv aanwezig zijn, moet het algoritme van de acties ongeveer als volgt zijn:
a) Eerst moet u het pictogram ( Mijn computer) en klik er met de rechtermuisknop op, selecteer ( Eigenschappen).
b) Ga nu naar het tabblad ( Apparatuur) en drukt op de knop ( apparaatbeheer).
c) Nu moet u het apparaat selecteren waarvoor het stuurprogramma zal worden geïnstalleerd/geüpdatet. Op de lijn met het apparaat moet u met de rechtermuisknop klikken en selecteren ( Eigenschappen), of u kunt er eenvoudigweg op dubbelklikken om naar de gewenste instellingen te gaan.
d) Ga naar het tabblad ( Bestuurder), selecteer de knop ( Update).
e) Selecteer in het dialoogvenster dat verschijnt het item ( Nee, deze keer niet) en ga naar ( Volgende).
f) In dit stadium zijn er twee opties. U kunt proberen stuurprogramma's automatisch te installeren, waarna het besturingssysteem zelf zal proberen stuurprogramma's te vinden die geschikt zijn voor het apparaat en deze te installeren, hiervoor selecteren we ( Automatische installatie (aanbevolen)), als de poging mislukt, moet je doorgaan naar het tweede punt ( Installatie vanaf een opgegeven locatie) en selecteer ( Volgende).
g) Dit menu-item impliceert een keuze tussen het zoeken naar een stuurprogramma op verwisselbare media en de optie om zelf de map met het stuurprogramma op te geven. Als u daarom een schijf met stuurprogramma's heeft, moet u de schijf in de cd-rom plaatsen en de optie selecteren ( Zoeken op verwisselbare media (floppy disks, cd's...)) en gaan ( Volgende).
Als het stuurprogramma zelf op internet wordt gevonden en gedownload, moet u als volgt handmatig het pad opgeven naar de map waarin de installatiegegevens voor het stuurprogramma zich bevinden. Selecteer het artikel ( Voeg de volgende zoeklocatie toe:) en ga naar ( Beoordeling), selecteer nu de map met het stuurprogramma uit de lijst en klik op de knop ( OK). Nu gaan we moedig verder ( Volgende), als alles correct is gedaan, begint de installatie van het benodigde stuurprogramma.
DOS Debug is een foutopsporingstoepassing die de functionaliteit van de originele MS DEBUG-opdracht verbetert. Het draait alleen op 32-bit computerarchitecturen en speelt de rol van een assembler en dissassembler, waardoor programmeurs een manier krijgen om COM en andere uitvoerbare bestanden te diagnosticeren.
Het pakket bevat een binair bestand bedoeld voor het debuggen van 16-bits toepassingen (DEBUG.COM), evenals een aangepaste versie genaamd DEBUGX.COM, die compatibel is met 16-bits en 32-bits toepassingen die in de beveiligde modus draaien (DPMI-compatibel ).
De applicatie draait in de opdrachtconsole, zodat u een lijst met alle beschikbare opdrachten kunt bekijken door naar de sectie "Help" te gaan.
Onder de extra functies die DOS Debug met zich meebrengt, vindt u verbeteringen aan de assembler en dissassembler (die u op de hoogte kunnen stellen als er processor-incompatibiliteiten worden gedetecteerd), ondersteuning voor FPU-opcodes, 80386+ CPU's en als zodanig 32-bit registernamen.
Het kan ook fungeren als een hex dump-applicatie en bundelt opties voor het analyseren van geheugeninhoud, het vergelijken of vullen van een reeks adressen, het weergeven van de MCB-keten (DOS-geheugencontroleblok). Met andere opdrachten kunt u toegang krijgen tot bepaalde schijfsecties, poorten en geheugensectoren of de naam van een programma instellen.
DEBUG.COM draait als een 16-bit programma, wat betekent dat het alleen op 16-bit applicaties kan werken, maar de verbeterde versie (DEBUGX.COM) maakt het debuggen van 32-bit DPMI-programma's ook mogelijk.
DOS Debug is bedoeld voor ervaren programmeurs en biedt een hulpprogramma dat de MS DEBUG-opdracht kan vervangen. Het kan zowel 16-bits als 32-bits DPMI-pakketten verwerken en bevat een gedetailleerde functiebeschrijving in de documentatie, waardoor u gemakkelijk kunt begrijpen wat elke opdracht doet.
Android Debug Bridge (adb) is een consoleprogramma waarmee u zowel mobiele Android-apparaten als emulators kunt debuggen.
Beschrijving
Dit hulpprogramma vereenvoudigt de installatie en het debuggen van applicaties aanzienlijk, en biedt ook toegang tot de Unix-shell. Deze laatste kan worden gebruikt om de nodige commando’s op het apparaat uit te voeren. Het programma kan onder meer worden gebruikt om een smartphone te ontgrendelen waarop de foutopsporingsmodus is ingeschakeld. Het is echter vermeldenswaard dat Android Debug Bridge het werken met alle Android-apparaten ondersteunt, op voorwaarde dat de noodzakelijke functionaliteit niet door de fabrikant is geblokkeerd.
Het programma omvat drie componenten:
- Cliënt. Draait op de pc van de ontwikkelaar en verzendt opdrachten. Om de klant te bellen, kunt u het juiste commando in de terminal gebruiken.
- Demon (adbd). Voert opdrachten uit op het apparaat. Draait op de achtergrond op elk apparaat.
- Server. Regelt de interactie tussen de client en de daemon. Draait op de achtergrond op de computer van de ontwikkelaar.
ADB-functies:
- Bekijk een lijst met verbonden en ondersteunde apparaten.
- Bekijk logboeken.
- Kopieer en breng gegevens en bestanden over tussen apparaten.
- Applicaties installeren en verwijderen.
- Het gegevensgedeelte wissen en overschrijven.
- En nog veel meer.
Vanaf onze website kunt u Android Debug Bridge volledig gratis downloaden, zonder registratie of sms.
Schermafbeeldingen
Debug.exe- een debuggerprogramma dat wordt gebruikt om uitvoerbare bestanden te controleren en te debuggen.
Gebruikt met besturingssysteem MS-DOS . Voor latere versies van besturingssystemen
werkt via emulator MS-DOS en heeft beperkte mogelijkheden. Gebeld via de opdrachtregel
DEBUG [[station:][route]bestandsnaam [opties]].
Bijvoorbeeld: DEBUG C:\...\Mijn.com
Dit programma is een consoletoepassing en is ontworpen om bestandscode te maken of te wijzigen. Hiermee kunt u eenvoudige toepassingen maken MS-DOS en hun prestaties monitoren. Deze debugger bevindt zich op het laagste niveau van compilers assembler. Maar het heeft behoorlijk goede mogelijkheden, zoals het bekijken en wijzigen van geheugen, het verkrijgen van de status van registers.
debug.exe-opdrachten
Regels voor de debug.exe-opdrachtenset:
· Debug.exe is niet hoofdlettergevoelig.
· Spaties in opdrachten worden alleen gebruikt om parameters van elkaar te scheiden.
· De ingevoerde cijfers moeten in het hexadecimale getallensysteem staan, zonder de afsluitende letter h.
· Het segment en de offset worden geschreven met een dubbele punt, in het formaat segment:offset, bijvoorbeeld CS:3C1 (offset 3C1h in een codesegment) of 40:17 (offset 17h in een segment waarvan het startadres 40h is).
Nadat de debugger is geladen, verschijnt er een prompt die op een koppelteken lijkt op het scherm. Registreert C.S., DS, ES, SS op dit moment worden geïnitialiseerd met het adres van het voorvoegsel van 256 bytes van het programmasegment, en het werkgebied in het geheugen begint met het adres van dit voorvoegsel + 100h. Teams debug.exe worden onmiddellijk na de uitnodiging ingevoerd op de plaats gemarkeerd met de cursor. Elk commando bestaat uit een identificatie en parameters, de identificatie bestaat uit één letter.
Tabel 1. Samenvatting van alle debug.exe-opdrachten
Team | Beschrijving | Formaat |
EEN (Monteren) | Assemblercommando's vertalen naar machinecode; | het standaardadres is CS:0100h.<адрес_начала_кода>] |
A[ | C (Vergelijken) | Het vergelijken van de inhoud van twee geheugengebieden; de standaardwaarde is DS.<начальный_адрес_1>De opdracht specificeert de lengte van secties of het bereik van adressen.<длина> <начальный_адрес_2>C<начальный_адрес_1> <конечный_адрес_1> <начальный_адрес_2> |
L | C | D (Weergave/dump)<начальный_адрес>Voer de inhoud van het geheugengebied uit in hexadecimale en ASCII-formaten. |
De standaardinstelling is DS; u kunt lengte of bereik opgeven. | Gegevens of machinecode-instructies in het geheugen invoeren; | de standaardwaarde is DS.<адрес> [<инструкции/данные>]] |
E [ | F (Vullen) | Het geheugengebied vullen met gegevens uit de lijst; de standaardwaarde is DS.<начальный_адрес_1>De opdracht specificeert de lengte van secties of het bereik van adressen.<длина> "<данные>U kunt zowel lengte als bereik gebruiken.<начальный_адрес> <конечный_адрес> "<данные>" |
F | " F | G (gaan)<начальный_адрес>] <адрес_останова> [<адрес_останова> ...] |
Voert een gedebugd machinetaalprogramma uit tot een opgegeven breekpunt; | de standaardwaarde is CS. Zorg ervoor dat het IP-adres het juiste adres bevat. | G[=<величина_1> <величина_2> |
H (hexadecimaal) | Bereken de som en het verschil van twee hexadecimale waarden. | H<адрес_порта> |
ik (invoer) | Eén byte van de poort lezen en uitvoeren. | I<адрес_в_памяти_для_загрузки>L (belasting)<адрес_в_памяти_для_загрузки> [<номер_диска> <начальный_сектор> <количество_секторов>]] |
Een bestand of gegevens van schijfsectoren in het geheugen laden; standaard is CS:100h. | Het bestand kan worden opgegeven met behulp van de N-opdracht of een argument bij het uitvoeren van debug.exe. | L [<начальный_адрес>De opdracht specificeert de lengte van secties of het bereik van adressen.<длина> <адрес_назначения>] L [<начальный_адрес> <конечный_адрес> <адрес_назначения> |
M (Verplaatsen) | Het kopiëren van de inhoud van geheugencellen; de standaardwaarde is DS. | U kunt zowel de lengte als het bereik opgeven.<имя_файла> |
M | M | N (naam)<адрес_порта> <байт> |
Specificatie van de bestandsnaam voor de L- en W-opdrachten. | N | O(uitvoer)<адрес_начала>] [<количество_инструкций>] |
Een byte naar een poort verzenden. | O | P(Procedure) |
Voert een CALL-, LOOP-, INT- of herhaalbare stringinstructie uit met REPnn-voorvoegsels, en gaat verder met de volgende instructie. | P[= | V (Afsluiten)<имя_регистра> |
Debug.exe afsluiten. | Q | R (Registreren)<начальный_адрес>De opdracht specificeert de lengte van secties of het bereik van adressen.<длина> "<данные>Drukt de inhoud van de registers en de volgende instructie af.<начальный_адрес> <конечный_адрес> "<данные>" |
R | S (Zoeken) | Zoek in het geheugen naar tekens uit de lijst; de standaardwaarde is DS.<адрес_начала>] [<количество_выполняемых_команд>] |
U kunt zowel de lengte als het bereik opgeven. | S | "S<начальный_адрес>T (Trace)<начальный_адрес конечный_адрес>] |
Stapsgewijze uitvoering van het programma. Net als bij de P-opdracht is het standaardpaar CS:IP. Merk op dat het voor het uitvoeren van interrupts beter is om het P-commando te gebruiken. | T [= | U (niet gemonteerd)<адрес> [<номер_диска> <начальный_сектор> <количество_секторов>]] |
Het demonteren van machinecode; de standaardwaarde is het CS:IP-paar. Helaas demonteert debug.exe specifieke opdrachten voor 80286+ processors niet correct, hoewel ze nog steeds correct worden uitgevoerd.
U [ ] U [ W (schrijven) ] U [ Schrijf een bestand vanuit debug.exe; Het is noodzakelijk om de bestandsnaam op te geven met de opdracht N als deze nog niet is geladen. En programma's worden alleen opgenomen als .COM-bestanden!
W [
Bekijk geheugengebieden Laten we het werk van het team eens nader bekijken.
D
, waarmee u de inhoud van afzonderlijke geheugengebieden kunt bekijken. In dit voorbeeld wordt de opdracht gebruikt
Het adres dat in de regel is opgegeven, heeft uitsluitend betrekking op de eerste byte in de paragraaf en de adressen van volgende bytes moeten onafhankelijk worden berekend. Hexadecimale weergave bevat twee tekens in elke byte, en de bytes zelf zijn gescheiden door spaties om het lezen te vergemakkelijken. Bovendien moet worden opgemerkt dat de achtste en negende bytes worden gescheiden door een koppelteken, waardoor de paragraaf in twee delen wordt verdeeld en het gemakkelijker wordt om de adressen van de bytes in de paragraaf te berekenen.
Handige D-Team-trucs
Parallelle en seriële poorten controleren
De eerste 16 bytes van het BIOS-gegevensgebied bevatten de adressen van de parallelle en seriële poorten. Daarom kunt u met de volgende opdracht deze poorten controleren:
De eerste acht afgedrukte bytes geven de seriële poortadressen aan COM1-COM4. De volgende 8 bytes geven de adressen van de parallelle poorten aan LPT1-LPT4. Als uw computer bijvoorbeeld één parallelle poort heeft, zijn de eerste twee bytes waarschijnlijk: 7803. Het poortadres wordt in omgekeerde volgorde geschreven, d.w.z. 0378.
Controle van de uitrusting
De eerste twee bytes, gelegen in het BIOS op adres 410h, bevatten informatie over de hardware die in het systeem is geïnstalleerd. We vinden deze bytes met het commando:
Laten we aannemen dat de eerste twee bytes 23 44 zijn. Laten we deze bytes decoderen om informatie over geïnstalleerde apparaten te verkrijgen. Om dit te doen, draaien we deze bytes om (44 23) en converteren ze vervolgens naar het binaire getalsysteem. Wij krijgen:
Beetje waarde | ||||||||||||||||
Bitpositie |
Wat betekenen deze stukjes? Laten we doorgaan met het ontcijferen:
Controle van de status van het toetsenbordregister
Op het gebied van data BIOS op het adres 417u De eerste byte wordt gelokaliseerd, waarin de status van het toetsenbordregister wordt opgeslagen. Schakel uit Numlock En Capslock en typ vervolgens de opdracht:
De eerste byte is 00. Door in te schakelen Numlock En Capslock, voer de opdracht opnieuw uit. Nu zou de eerste byte gelijk moeten zijn aan 60. Experimenteel is vastgesteld dat wanneer ingeschakeld Numlock de eerste byte is 20, en wanneer Capslock - 40.
De status van het videosysteem controleren
Op adres 449u V BIOS is het eerste videogegevensgebied. Om dit te controleren typen we:
De eerste byte toont de huidige videomodus (bijvoorbeeld 03 - kleur) en de tweede - het aantal kolommen (bijvoorbeeld 50 - 80 kolommodus). Het aantal regels vindt u op 484 uur (40:84).
BIOS-copyright en serienummer controleren
Copyrightinformatie voor BIOS ingebouwd ROM BIOS op het adres FE00:0. De copyrightregel kan eenvoudig worden gevonden in de ASCII-reeks en het serienummer kan worden gevonden als een hexadecimaal getal. Hoewel de copyrightregel lang kan zijn en niet in het toegewezen geheugengebied past. In dit geval moet u gewoon opnieuw invoeren ] U [.
De productiedatum van het BIOS controleren
Deze datum wordt ook vastgelegd in ROM BIOS beginnend bij het adres FFFF:5. Na het uitvoeren van het overeenkomstige commando zal de ASCII-reeks deze datum bevatten, geschreven in het formaat mm/dd/jj.
Een programma rechtstreeks in het geheugen invoegen met behulp van debug.exe
debug.exe Hiermee kunt u een programma rechtstreeks in het geheugen van de machine invoeren en vervolgens de uitvoering ervan controleren en controleren. We zullen het programma in machinecodes invoeren met behulp van het commando E. Wees echter voorzichtig - Het invoeren van onjuiste gegevens op het verkeerde adres heeft onvoorspelbare gevolgen! Hoewel het onwaarschijnlijk is dat dit tot ernstige problemen in het systeem zal leiden, waarbij alle ingevoerde gegevens verloren gaan debug.exe, dat kan gemakkelijk. Het programma dat moet worden ingevoerd, gebruikt de gegevens die rechtstreeks in de hoofdtekst van de instructies staan. Het volgende is een lijst van het programma in Assembleertaal, de opmerkingen geven analogen aan van taalopdrachten in machinecode, evenals een uitleg van elke opdracht. Merk op dat er geen symbool in de cijfers staat H, omdat, zoals hierboven vermeld, debug.exe begrijpt alleen getallen in het hexadecimale systeem.
MOVAX, 0123 ; code B82301: voer in AX de waarde 0123h in
BIJL TOEVOEGEN, 0025 ; code 052500: voeg 0225h toe aan de AX-waarde
MOV BX, AX; code 8BD8: voer de waarde van AX in BX in
BX, AX TOEVOEGEN; code 03D8: voeg de waarde van AX toe aan BX
MOV CX, BX; code 8BCB: voer de waarde van BX in CX in
SUB CX, AX; code 2BC8: trek de waarde van AX af van CX
SUB BIJL, BIJL ; code 2BC0: duidelijke AX
JMP 100; EBEE-code: ga naar het begin van het programma
Zoals u kunt zien, heeft elke machine-instructie een lengte van 1 tot 3 bytes. De eerste byte geeft de bewerking aan, de volgende bytes geven de operanden aan. De uitvoering van het programma begint dienovereenkomstig met de eerste instructie en doorloopt achtereenvolgens alle instructies. Nu kunt u het programma in het geheugen invoeren. Laten we de machinecode in drie delen van zes bytes verdelen en elk met de opdracht invoeren E en beginnend vanaf het adres CS:100.
Nu het programma in het geheugen is ingevoerd, gaan we proberen de uitvoering ervan te controleren. Laten we eerst de huidige status van de registers en vlaggen controleren; voer hiervoor de opdracht in R. De debugger zal de inhoud van de registers in hexadecimale vorm uitvoeren; De inhoud van de registers kan op verschillende machines variëren.
Dus, zoals je kunt zien, debug.exe geïnitialiseerde segmenten DS, ES, SS, C.S. hetzelfde adres. Register IP bevat 0100 , wat aangeeft dat instructies vanuit offset worden uitgevoerd 100 uur relatief C.S.(en wij, die instructies in het geheugen hebben ingevoerd, hebben zojuist dit adres aangegeven).
Ook de waarden van de overflow, direction, interrupt, sign, zero, extra carry, parity en carry vlaggen worden hier aangegeven:
Na registers en vlagstatussen geeft debug.exe informatie weer over de eerste instructie die wordt uitgevoerd:
· Het adres van de instructie, in ons geval is dit 0B12:0100, waarbij 0B12 het adres van het codesegment is.
· Machinecode die overeenkomt met deze instructie (B82301).
· De feitelijke instructie geschreven in assembler (MOV AX,0123).
Laten we nu, na het analyseren van de inhoud van de registers en vlaggen, verder gaan met het uitvoeren van het programma. We zullen het programma stap voor stap uitvoeren met behulp van het commando T. Het commando voor de eerste keer gebruiken T, wij volgen de instructies MOV. Hier is de machinecode van de instructie-operand - 2301 . De operatie plaatsen 23 V AL(jongere helft BIJL), A 01 - V AH.(senior). Daarna debug.exe drukt de registerinformatie opnieuw af:
Nu BIJL bevat 0123u, IP ‑ 0103u(vandaar de lengte van de uitgevoerde instructie: 0103u - 0100 uur = 3 bytes), en de volgende instructie specificeert de bewerking TOEVOEGEN. Dus steeds opnieuw het commando uitvoeren T, bereiken we de laatste instructie JMP 100. Zij zal het register instellen IP V 100 uur, En debug.exe keert u terug naar het begin van het programma. Terugkerend naar het begin van het programma, moet worden opgemerkt dat in DS, ES, SS En C.S. bevat hetzelfde adres. Het punt is dat debug.exe behandelt ingevoerde programma's uitsluitend als programma's .COM. En in programma's .COM, in tegenstelling tot .EXE,stack, code en data worden in één segment opgeslagen.
Montage en demontage
In het vorige voorbeeld hebben we het programma echter in machinecode ingevoerd: debug.exe volledig in staat om instructies geschreven in assembleertaal te begrijpen. Om met dergelijke programma's te werken debug.exe commando's worden gebruikt A En U.
Team A vraagt instructies in assembleertaal op en zet deze om in machinecode. Eerst initialiseren we het startadres voor het invoeren van instructies (100 uur):
De debugger drukt het codesegmentadres en de offset af (bijvoorbeeld 13F2:0100). Nu moeten we de volgende assembleertaalinstructies in het geheugen invoeren, na elke regel dat u op drukt Binnenkomen:
Nadat u de laatste instructie heeft ingevoerd, drukt u op Binnenkomen tweemaal om aan de debugger aan te geven dat we klaar zijn met het typen van de programmatekst. Nu kan het programma worden gestart met behulp van de commando's R om registers te bekijken en T voor tracering. Ik merk dat in mijn programma's, als er instructies zijn INT ze mogen niet op bevel worden verwerkt T, en het team P, die alle interrupts in één keer afhandelt.
Laten we verder gaan met de demontageprocedure en het programma dat we zojuist hebben geïntroduceerd als voorbeeld nemen. We gebruiken de adressen van de eerste en laatste instructies om het bereik aan te geven dat we gaan demonteren, d.w.z. 100 uur En 107u.
Na het uitvoeren van deze opdracht debug.exe geeft de instructies weer in het opgegeven bereik, in assembleertaal, in machinecode, evenals het adres van elke instructie:
Het programma op schijf opslaan
Eerst wordt de bestandsnaam ingesteld:
Vervolgens naar de kassa CX je moet de grootte van het programma in bytes invoeren. Het zal gelijk zijn aan het verschil tussen de uiteindelijke en initiële verplaatsingen. Nu hoeft u alleen nog maar naar de schijf te schrijven met de opdracht W en zie als resultaat het aantal geschreven bytes. Het resultaat is dat we een programma gereed hebben voor uitvoering.
De uitgang wordt uitgevoerd door het commando Q. Voorbeeld:
0B3B:0100 beweegbijl,1234
0B3B:0103 mov ah, 4c
0B3B:0105 int 21
0B3B:0100 B83412 MOVAX,1234
0B3B:0103 B44C MOV AH,4C
0B3B:0105 CD21INT 21
AX=0000 BX=0000 CX=0007 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B3B ES=0B3B SS=0B3B CS=0B3B IP=0100 NV UP EI PL NZ NA PO NC
0B3B:0100 B83412 MOVAX,1234
Schrijf 00007 bytes
Om dit lab te voltooien, heb je verschillende assembler-opdrachten nodig:
MOV AH,<шестнадцатиричное число>- inschrijving in het register AH. cijfers 02 om een systeemfunctie aan te geven: toon het symbool op het scherm;
MOVDL,<шестнадцатиричное число>- inschrijving in het register D.L. tekencode;
INT 21 is de belangrijkste DOS-interrupt (procedure) die veel verschillende functies implementeert; het functienummer wordt vooraf in het AH-register geschreven; om een teken op het scherm af te drukken - in het AH-register, functie 02, terwijl u in bent D.L. schrijf de symboolcode vooraf.
INT 20 - DOS-interrupt, die het programma verlaat (vanuit een COM-programma).
Voorbeeld:
Geef het symbool "*" op het scherm weer.
mov AH,02; systeemfunctie 02 - weergave van een symbool op het scherm
mov DL,2A; ASCII-code voor asterisk
tot 21u; interrupt voor uitvoer "*"
tot 20u; verlaat het programma
Praktische taak
Doel
Maak kennis met de debug.exe-foutopsporing. Praktische vaardigheden verwerven bij het werken met dit programma.
Apparatuur:
Een personal computer met het Windows-besturingssysteem.
Software:
Debug-programma.
Vragen voor toelating
1. Waar is het Debug-programma voor?
2. Hoe voer ik dit programma uit?
3. Hoe worden opdrachten ingevoerd in Debug?
4. Wat is een identiteitsbewijs?
5. Hoe wordt een programma ingevoerd in Debug?
Oefening
· Bestudeer theoretisch materiaal.
· Voer de opdrachten uit die in de hele tekst worden beschreven.
· Vind de som en het verschil van 2 cijfers: het 1e getal is het getal in de groep (omgerekend naar hexadecimale vorm), het 2e is het getal dat tegengesteld is aan het getal van de eerste letter van de achternaam in het alfabet (negatief getal in complementaire code) . Converteer de som en het verschil naar decimale vorm.
· Bekijk de inhoud van de microprocessorregisters, evenals vlaggen, en noteer ze in het protocol. Welke functie vervult elk register? .
· Schrijf het eerste nummer (uit taak 3) in het AX-register en het tweede nummer (uit taak 3) in het BX-register. Voer de machine-instructie in om de AX- en BX-registers toe te voegen aan het RAM-codesegment (offset 100). Bekijk het assembler-formulier op het scherm. Voer deze opdracht uit en converteer het resultaat naar decimale vorm.
· Voer in het RAM-geheugen in het codesegment (offset 100) een reeks assembler-opdrachten in om een symbool op het scherm af te drukken: de eerste letter van uw achternaam. Controleer het programma in DEBUG. Schrijf het vervolgens naar schijf als een .COM-bestand. Wat is de programmagrootte? Voer het uit vanuit DOS.
· Beschrijf alle acties in het rapport.
1. Titel van het werk.
2. Doel van het werk.
3. Instrumenten en uitrusting.
4. Korte theoretische informatie.
5. Beschrijving van de ondernomen acties.
6. Tekst van het gemaakte programma.
7. Conclusies.
Beveiligingsvragen
1. Met welk commando worden machinecodegegevens of instructies in het geheugen ingevoerd?
2. Hoe vergelijk je de inhoud van twee geheugengebieden?
3. Hoe kan ik het geheugengebied vullen met gegevens uit de lijst?
4. Welk commando voert een foutopsporingsprogramma uit in machinetaal?
5. Welk commando schrijft een bestand vanuit Debug?
6. Hoe wordt de montage en demontage uitgevoerd?