Introdução
Editores hexadecimais são úteis na análise de dados binários para facilitar a localização de algum padrão ou formato. O vi
, com a ajuda do xxd
, pode ser utilizado como um editor hexadecimal.
O xxd
O xxd
é um comando comumente encontrado no linux que retorna a entrada na sua forma hexadecimal e incluindo também o offset de cada byte e a representação textual do byte.
A saída do comando é algo assim:
$ echo 'Old programmers never die. They just branch out to a new addres' | xxd 0000000: 4f6c 6420 7072 6f67 7261 6d6d 6572 7320 Old programmers 0000010: 6e65 7665 7220 6469 652e 2054 6865 7920 never die. They 0000020: 6a75 7374 2062 7261 6e63 6820 6f75 7420 just branch out 0000030: 746f 2061 206e 6577 2061 6464 7265 730a to a new addres.
Saiba mais sobre esse programa em [2].
Integrando o xxd com o vi
Abra um arquivo binário qualquer pelo vi
. Tudo que você verá são caracteres “estranhos”, que são os bytes sem representação textual.
$ vi -b musica.mp3
Não esqueça da opção -b
para o vi
considerar a entrada como binária e não inserir o ‘\n’ no final do último byte.
Digite em seguida o seguinte comando:
:%!xxd
A tela mudará para a saída do xxd
, ou seja, os bytes serão representados por sua forma hexadecimal. Nesse momento você pode alterar qualquer valor na representação hexadecimal (não altere a parte textual porque isso não influenciará nos bytes originais).
Para salvar o arquivo é necessário voltar na visualização binária:
:%!xxd -r
e depois salvar:
:w
Setando Atalhos
Podemos setar a tecla F8
para mudar entre o modo hexadecimal e binário. Para isso, basta acrescentar as linhas no arquivo ~/.vimrc
:
" Mapeia a função a tecla F8 noremap <F8> :call HexMe()<CR> " Definição da função let $in_hex=0 function HexMe() set binary set noeol if $in_hex>0 :%!xxd -r let $in_hex=0 else :%!xxd let $in_hex=1 endif endfunction
É criada uma função, HexMe()
, que é chamada toda vez que se pressiona F8
. Ela contém uma flag, in_hex
, que dirá para qual modo ir.
Com essa função, não será necessário abrir o vi/vim
em modo binário através da opção -b
, pois a função HexMe()
já seta o vi/vim
em modo binário. Porém, ainda é necessário usar ':w'
para salvar os dados.
Referências
[1] Using vi as a hex editor by kev (Acessado em: Junho/2014)
http://www.kevssite.com/2009/04/21/using-vi-as-a-hex-editor/
[2] Hex Dump Com O xxd by daemonio (Acessado em: Junho/2014)
https://daemoniolabs.wordpress.com/2011/07/07/hex-dump-com-o-xxd/
Pingback: Usando vi/vim como editor hexadecimal - 0fx66 - Blog do von