Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Als u C- of C++-bronbestanden voor uw toepassing hebt, kunt u het foutopsporingsprogramma veel krachtiger gebruiken als u fouten opspoort in de bronmodus.
Het is echter vaak niet mogelijk om bronopsporing uit te voeren. Mogelijk hebt u de bronbestanden voor uw toepassing niet. Mogelijk kunt u fouten opsporen in de code van iemand anders. Mogelijk hebt u uw uitvoerbare bestanden niet gemaakt met volledige .pdb-symbolen. En zelfs als u bronopsporing voor uw toepassing kunt uitvoeren, moet u mogelijk Microsoft Windows-routines traceren die door uw toepassing worden aanroepen of die worden gebruikt om uw toepassing te laden.
In deze situaties moet u fouten opsporen in de assemblymodus. Bovendien heeft de assemblymodus veel nuttige functies die niet aanwezig zijn in bronopsporing. Het foutopsporingsprogramma geeft automatisch de inhoud van geheugenlocaties weer en registreert wanneer deze worden geopend en geeft het adres van de programmateller weer. Deze weergave maakt assembly-foutopsporing een waardevol hulpprogramma dat u samen met bronopsporing kunt gebruiken.
Demontagecode
Het foutopsporingsprogramma analyseert voornamelijk binaire uitvoerbare code. In plaats van deze code in onbewerkte indeling weer te geven, wordt deze code gedemonteerd door het foutopsporingsprogramma . Dat wil gezegd, het foutopsporingsprogramma converteert de code van de computertaal naar de assemblytaal.
U kunt de resulterende code (ook wel de demontagecode genoemd) op verschillende manieren weergeven:
Met de opdracht u (unassemble) wordt een opgegeven sectie van de computertaal gedemonteerd en weergegeven.
Met de opdracht uf (Unassemble Function) wordt een functie gedemonteerd en weergegeven.
Met de opdracht Up (Unassemble from Physical Memory) wordt een opgegeven sectie van machinetaal, die is opgeslagen in fysiek geheugen, gedemonteerd en weergegeven.
De ur opdracht (Unassemble Real Mode BIOS) demonteert en geeft een opgegeven 16-bits real-mode code weer.
De ux (Unassemble x86 BIOS) opdracht demonteert en toont de instructieset van de op x86 gebaseerde BIOS-code op een opgegeven adres.
(Alleen WinDbg) Het disassemblagevenster disassembleert en geeft een opgegeven sectie van de machinecode weer. dit venster is automatisch actief als u de opdracht voor het automatisch openen van de demontage selecteert in het venstermenu . U kunt dit venster ook openen door demontage te selecteren in het menu Beeld , op Alt+7 te drukken of op de demontageknop (alt+7) te drukken.
De demontageweergave wordt weergegeven in vier kolommen: adresoffset, binaire code, assemblytaal mnemoniek en assemblytaaldetails. In het volgende voorbeeld ziet u deze weergave.
0040116b 45 inc ebp
0040116c fc cld
0040116d 8945b0 mov eax,[ebp-0x1c]
Rechts van de regel die de huidige programmateller vertegenwoordigt, worden op de weergave de waarden weergegeven van alle geheugenlocaties of registers die worden geopend. Als deze regel een vertakkingsinstructie bevat, wordt de notatie [br=1] of [br=0] weergegeven. Deze notatie geeft een vertakking aan die respectievelijk wel of niet wordt gevolgd.
U kunt de opdracht .asm (Opties voor demonteren wijzigen) gebruiken om te wijzigen hoe de gedemonteerde instructies worden weergegeven.
In het venster Demontage van WinDbg is de lijn die de huidige programmateller vertegenwoordigt gemarkeerd. Lijnen waarin onderbrekingspunten zijn ingesteld, worden ook gemarkeerd.
U kunt ook de volgende opdrachten gebruiken om assemblycode te bewerken:
Met het commando # (Zoeken naar het disassemblagepatroon) wordt in een bepaald geheugengebied gezocht naar een specifiek patroon. Deze opdracht is gelijk aan het doorzoeken van de vier kolommen van de demontageweergave.
De opdracht a (Assembly) kan assembly-instructies nemen en deze omzetten in binaire machinecode.
Assemblymodus en bronmodus
Het foutopsporingsprogramma heeft twee verschillende besturingsmodi: assemblymodus en bronmodus.
Wanneer u een toepassing met één stap doorloopt, is de grootte van één stap één regel assemblycode of één regel broncode, afhankelijk van de modus.
Verschillende opdrachten creëren verschillende gegevensweergaven, afhankelijk van de modus.
In WinDbg wordt het venster Demontage automatisch naar de voorgrond verplaatst wanneer u een toepassing uitvoert of doorloopt in de assemblymodus. In de bronmodus wordt het bronvenster naar de voorgrond verplaatst.
U kunt een van de volgende handelingen uitvoeren om de modus in te stellen:
Gebruik de opdracht l+, l- (Bronopties instellen) om de modus te beheren. De l-t-opdracht activeert de assemblymodus.
(Alleen WinDbg) Deselecteer de opdracht Bronmodus in het menu Debuggen om de debugger in de assemblymodus te brengen. U kunt ook de knop Bronmodus uitschakelen op de werkbalk selecteren.
In WinDbg, wanneer u zich in de assemblymodus bevindt, wordt ASM weergegeven op de statusbalk.
Het snelmenu in het venster Disassemblage van WinDbg bevat de opdracht Markeer instructies van de huidige bronregel. Met deze opdracht worden alle instructies gemarkeerd die overeenkomen met de huidige regel van de broncode. Vaak komt één bronlijn overeen met meerdere assembly-instructies. Als code is geoptimaliseerd, zijn deze assembly-instructies mogelijk niet opeenvolgend. Met het commando instructies markeren van de huidige bronregel kunt u alle instructies vinden die zijn samengesteld uit de huidige bronregel.
Bronbestanden voor assemblytaal
Als uw toepassing is geschreven in de assemblytaal, komt de demontage die het foutopsporingsprogramma produceert mogelijk niet exact overeen met uw oorspronkelijke code. In het bijzonder zullen NO-OPs en opmerkingen niet aanwezig zijn.
Als u fouten in uw code wilt opsporen door te verwijzen naar de oorspronkelijke ASM-bestanden, moet u foutopsporing in de bronmodus gebruiken. U kunt het assemblybestand laden, zoals een C- of C++-bronbestand. Zie Foutopsporing in de bronmodus voor meer informatie over dit soort foutopsporing.