¿Es posible buscar una secuencia de bytes hexl-mode
y posiblemente resaltarla?
Por ejemplo, en el archivo a continuación quiero buscar la secuencia de bytes f9beb4d9
. isearch
no funciona porque busca la presentación en el búfer y no el archivo original.
00000000: f9be b4d9 1d01 0000 0100 0000 0000 0000 ................
00000010: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000020: 0000 0000 0000 0000 0000 0000 3ba3 edfd ............;...
00000030: 7a7b 12b2 7ac7 2c3e 6776 8f61 7fc8 1bc3 z{..z.,>gv.a....
00000040: 888a 5132 3a9f b8aa 4b1e 5e4a 29ab 5f49 ..Q2:...K.^J)._I
00000050: ffff 001d 1dac 2b7c 0101 0000 0001 0000 ......+|........
00000060: 0000 0000 0000 0000 0000 0000 0000 0000 ................
Respuestas:
Si usa
nhexl-mode
(disponible en su archivo vecino GNU ELPA), puede hacerloC-s f9beb4d9
y buscará la secuencia de 4 bytes con códigosf9
be
b4
d9
(así como el textof9beb4d9
de 8 bytes, por supuesto, y también los bytes en las direcciones que se incluyenf9beb4d9
en su representación hexadecimal).fuente
M-x report-emacs-bug
dando tantos detalles como sea posible (una URL a un archivo grande de muestra también podría ser útil, ya que el rendimiento puede verse afectado significativamente por el contenido del archivo).El siguiente código lisp coloca una entrada "Modo de búsqueda Hexl" en el menú "Hexl".
Ese elemento del menú (des) activa el modo menor
hexl-isearch-mode
. Si activa ese modo,isearch
busca en los datos binarios en lugar del búfer hexl.La cadena de búsqueda se lee con
read
. Entonces, todas las secuencias de escape para cadenas de lisp funcionan. Como ejemplo, puede buscar\x0a\x0d
o\^M\n
buscar extremos de línea dos.El código no es perfecto.
Supongamos que busca una cadena
ELF\x01
que solo ocurre al comienzo de un archivo. Además, suponga que hay una cadenaELf\x00
más adelante en el binario. Luego, cuando llegues aELF\x0
escribir, Emacs encontrará la coincidencia posterior y si continúas escribiendo,ELF\x01
Emacs piensa que no hay ocurrencias de esa cadena porque ya llegó a laELF\x0
que aparece más tarde en el archivoELF\x01
. Vale la pena hacer una búsqueda superpuesta en tal caso. (Ese problema ya está solucionado en la versión git del paquete ).Solo la secuencia de bytes se resalta correctamente en el búfer hexl, no la representación de cadena en el lado derecho.
Si la cadena de búsqueda abarca dos líneas en el búfer hexl, la representación de la cadena al final de la línea y la dirección al comienzo de la línea también se resaltan. Eso no se debe a que pertenecen a la coincidencia, sino a que están en el camino al resaltar la secuencia de bytes.
fuente