Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Se você tiver arquivos de origem C ou C++ para seu aplicativo, poderá usar o depurador de forma muito mais poderosa se depurar no modo de origem.
No entanto, há muitas ocasiões em que não é possível realizar a depuração de origem. Talvez você não tenha os arquivos de origem para seu aplicativo. Pode estar a corrigir bugs no código de outra pessoa. Talvez você não tenha criado seus arquivos executáveis com símbolos .pdb completos. E mesmo que você possa fazer depuração de origem em seu aplicativo, talvez seja necessário rastrear rotinas do Microsoft Windows que seu aplicativo chama ou que são usadas para carregar seu aplicativo.
Nessas situações, você tem que depurar no modo de montagem. Além disso, o modo assembly tem muitos recursos úteis que não estão presentes na depuração de código-fonte. O depurador exibe automaticamente o conteúdo de locais de memória e registra como eles são acessados e exibe o endereço do contador do programa. Este ecrã torna a depuração de assembly uma ferramenta muito útil que pode usar em conjunto com a depuração a partir do código fonte.
Código de desmontagem
O depurador analisa principalmente o código executável binário. Em vez de exibir esse código em formato bruto, o depurador desmonta esse código. Ou seja, o depurador converte o código de linguagem de máquina para linguagem assembly.
Você pode exibir o código resultante (conhecido como código de desmontagem) de várias maneiras diferentes:
O comando u (Unassemble) desmonta e exibe uma seção especificada da linguagem de máquina.
O comando uf (Unassemble Function) desmonta e exibe uma função.
O comando up (Unassemble from Physical Memory) desmonta e exibe uma seção especificada de linguagem de máquina que foi armazenada na memória física.
O comando your (Unassemble Real Mode BIOS) desmonta e exibe um código de modo real de 16 bits especificado.
O comando ux (Unassemble x86 BIOS) desmonta e exibe o conjunto de instruções de código do BIOS baseado em x86 em um endereço especificado.
(Apenas WinDBG) A janela de desmontagem desmonta e exibe uma seção especificada de linguagem de máquina. Esta janela fica automaticamente ativa se você selecionar o comando Abrir desmontagem automaticamente no menu Janela . Você também pode abrir essa janela selecionando Desmontagem no menu Exibir, pressionando ALT+7 ou pressionando o botão Desmontagem (ALT+7).
A exibição de desmontagem aparece em quatro colunas: deslocamento de endereço, código binário, mnemônico de linguagem de montagem e detalhes da linguagem de montagem. O exemplo a seguir mostra essa exibição.
0040116b 45 inc ebp
0040116c fc cld
0040116d 8945b0 mov eax,[ebp-0x1c]
À direita da linha que representa o contador de programa atual, a exibição mostra os valores de quaisquer locais de memória ou registros que estão sendo acessados. Se esta linha contiver uma instrução de ramificação, a notação [br=1] ou [br=0] será exibida. Esta notação indica um ramo que é ou não tomado, respectivamente.
Você pode usar o comando .asm (Alterar opções de desmontagem) para alterar como as instruções desmontadas são exibidas.
Na janela de Desmontagem do WinDbg, a linha de código que representa o contador do programa atual é realçada. As linhas onde os pontos de interrupção são definidos também são realçadas.
Você também pode usar os seguintes comandos para manipular o código do assembly:
O comando # (Search for Disassembly Pattern) procura um padrão específico numa região da memória. Este comando é equivalente a pesquisar as quatro colunas do visor de desmontagem.
O comando a (Assemble) pode pegar instruções de montagem e traduzi-las em código binário de máquina.
Modo de montagem e modo de origem
O depurador tem dois modos de operação diferentes: modo de montagem e modo de origem.
Quando você está passando por um único aplicativo, o tamanho de uma única etapa é uma linha de código de montagem ou uma linha de código-fonte, dependendo do modo.
Vários comandos criam exibições de dados diferentes, dependendo do modo.
No WinDbg, a janela Desmontagem se move automaticamente para o primeiro plano quando você executa ou percorre um aplicativo no modo de montagem. No modo de origem, a janela Código-fonte se move para o primeiro plano.
Para definir o modo, você pode seguir um destes procedimentos:
Use o comando l+, l- (set Source Options) para controlar o modo. O comando l-t ativa o modo de montagem.
(Apenas WinDBG) Desmarque o comando Modo de origem no menu Depurar para fazer com que o depurador entre no modo de montagem. Você também pode selecionar o botão Modo de origem desativado na barra de ferramentas.
No WinDbg, quando você está no modo de montagem, o ASM aparece visível na barra de status.
O menu de atalho na janela de Desmontagem do WinDbg inclui o comando Realçar instruções a partir da linha de origem atual. Este comando destaca todas as instruções que correspondem à linha de origem atual. Frequentemente, uma única linha de origem corresponde a várias instruções de montagem. Se o código tiver sido otimizado, essas instruções de montagem podem não ser consecutivas. O comando Realçar instruções da linha de origem atual permite que você encontre todas as instruções que foram montadas a partir da linha de origem atual.
Arquivos de origem da linguagem Assembly
Se seu aplicativo foi escrito em linguagem assembly, a desmontagem que o depurador produz pode não corresponder exatamente ao seu código original. Em particular, não estarão presentes NO-OPs nem comentários.
Se você quiser depurar seu código fazendo referência aos arquivos .asm originais, deverá usar a depuração no modo de origem. Você pode carregar o arquivo assembly como um arquivo de origem C ou C++. Para obter mais informações sobre esse tipo de depuração, consulte Depuração no modo de origem.