Vi Como Editor Hexadecimal

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.

Tela Vi binário

Tela Vi binário

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).

Tela Vi Hex

Tela Vi Hex

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/

Um pensamento sobre “Vi Como Editor Hexadecimal

  1. Pingback: Usando vi/vim como editor hexadecimal - 0fx66 - Blog do von

Deixe um comentário