usando gdb dentro do vim
Uma tentativa de tornar o vim um ide: http://www.vim.org/scripts/script.php?script_id=168
Observação: na linha 600 do arquivo ide.vim temos
return ret;
e devemos substituir por
return ret(sem o ponto-vírgula).
Inicialmente este blog foi criado para armazenar algumas dicas e links de UNIX/Linux, OpenVMS, linguagem C, Assembly, TCP/IP e nerdezas afins. No entanto devido ao autor ter abandonado o seu plano de ser um super hacker e dominar o mundo (devido esposa, família, filhos, trabalho), a partir de 2012 este blog tem um tipo de nerdeza mais light (Android, Linux, RetroPie (retrogames), produtividade, e por aí vai). Estas dicas raramente serão criações minhas.
Uma tentativa de tornar o vim um ide: http://www.vim.org/scripts/script.php?script_id=168
Observação: na linha 600 do arquivo ide.vim temos
return ret;
return ret(sem o ponto-vírgula).
Posted by
Unknown
at
23:38
0
comments
Essa eu aprendi na man page do gdb. Achei útil para ver o endereço e o tamanho das instruçoões.
O parâmetro "-batch" executa o gdb no modo execução de comandos em lote. E o parâmetro "-x file" é o arquivo onde está os comandos a serem executados.
Por exemplo: veja o seguinte arquivo chamado disassmain.
disassemble main
disassemble é o comando do gdb que desassembla uma função
Agora execute o seguinte comando (supondo um programa chamado prog):
$ gdb -batch -x disassmain prog
Observe o resultado e veja que maravilha! ;-)
Agora eu fiz um script muito simples, porém interessante, que recebe como parâmetros na linha de comando o nome da funcao a ser "desassemblada" e o nome do programa. Chamei-o carinhosamente de mdisasm (meleu's disassembler):
#!/bin/bash
TMPFILE=/tmp/mdisasm.$$ # este '$$' retorna o PID do script em execucaoif [ $# -ne 2 ]; then # $# eh o numero de argumentos (tem que ser 2)
echo
echo "uso: `basename $0` funcao programa
echo
exit 1
ficat << _EOF_ > $TMPFILE # abaixo daqui ateh _EOF_ vai para $TMPFILE
disassemble $1
_EOF_gdb -batch -x $TMPFILE $2
rm -f $TMPFILE
Isso é útil quando queremos ver o endereço de uma determinada instrução, seu tamanho e o seu mnemônico.
Agora para "desassemblar" uma única função e ver as instruções em hexadecimal (útil para escrita de shellcodes) eu ainda não achei uma solução. Ainda continuo usando 'objudump -d prog > arquivo.out' e depois lendo arquivo.out procurando a função desejada. Fica lançado um desafio pra mim mesmo. Queria uma solução simples, mas acho que terei que apelar para o grep+sed...
[Desafio vencido: http://mdicas.blogspot.com/2007/07/desassemblando-para-hexadecimal.html]