GDB
Um manual de referência para o gdb
Gdb é o acrônimo para Gnu Project Debugger. Ele é, como o nome diz, um debugger (depurador), que pode ser utilizado em engenharia reversa para obter o assembly e analisar arquivos binários.

Rodando e obtendo o Assembly (Disassembling)

Para abrir o programa, execute:
1
gdb nomeDoPrograma
Copied!
Por padrão, o gdb utiliza a sintaxe AT&T. Como nós vamos utilizar principalmente a sintaxe da Intel, podemos alterar usando:
1
set disassembly-flavor intel
Copied!
Para obter o assembly de uma função (por exemplo, a 'main'), devemos usar:
1
disassemble main
Copied!
É importante notar que o programa será mostrado do jeito que está em memória, porém podemos utilizar outros softwares para visualizar melhor o fluxo do programa.

GDB - Principais Comandos

Apertar somente 'Enter' é equivalente a digitar e rodar o último comando novamente. (é bem útil quando precisamos repetir o mesmo comando diversas vezes).

Controle de Fluxo

    run arg1, arg2...
1
Roda o programa, passando os argumentos arg1, arg2... (pode ser utilizado sem os argumentos também)
Copied!
    break *address
1
Define um breakpoint no endereço dado. Pode também ser utilizado passando o nome da função ao invés do endereço
Copied!
    del
1
Remove todos os breakpoints
Copied!
    si
1
Executa a instrução atual
Copied!
    ni
1
Igual o si, porém não mostra a execução de chamadas de função (caso a instrução seja uma chamada de função, ele continua executando até o retorno da chamada)
Copied!
    set $eax=x
1
Define o valor do registrador \(eax por exemplo\) para o valor dado 'x'
Copied!
    define hook-stop
1
Define uma ação para acontecer sempre que a execução parar (um 'stop'), como o exemplo:
Copied!
1
define hook-stop
2
info registers
3
x/24wx $esp
4
x/2i $eip
5
end
Copied!

Registradores

    info registers
1
Mostra o valor dos registradores do programa
Copied!
    x/wx $reg
1
Mostra o conteúdo de "reg" em hexadecimal
Copied!
    x/s $reg
1
Mostra o conteúdo de "reg" em ascii
Copied!
    x/24wx $esp
1
Mostra parte da stack do programa \(24 words, no exemplo\)
Copied!
    x/2i $eip
1
Mostra as próximas duas instruções
Copied!
    x NomeDaFunção
1
Mostra o endereço da função
Copied!
    p NomeDaFunção
1
Mostra o endereço e o tipo de retorno da função
Copied!
    info proc mappings
1
Mostra o mapa da memória
Copied!
Last modified 1yr ago