La pregunta del OP implica el uso de un editor hexadecimal. El usuario Marc Wilson ha señalado en un comentario que "... macOS incluye al menos un editor hexadecimal, que es xxd, y una aplicación segura para archivos binarios que puede ser utilizada como tal, que es vim." Además, también existen editores hexadecimales de terceros, como se muestra en la respuesta de Marc Wilson.
Esta respuesta demuestra cómo hacer los cambios necesarios sin depender de editores hexadecimales o herramientas de terceros. Dado que actualmente no tengo acceso a Sonoma, utilizaré Ventura 13.3.1 (a).
Nota: Esta respuesta asume que se está utilizando la versión de grep
2.6.0-FreeBSD
, la cual está incluida en macOS Monterey y al menos en MacOS Sonoma. En este caso, la versión anterior de grep
, 2.5.1-FreeBSD
, no funcionará correctamente, la cual está incluida en macOS Big Sur y se remonta al menos a Mac OS X Snow Leopard.
Los comandos a continuación copian el archivo TrashIcon.icns
a mi Escritorio.
cd ~/Escritorio
cp /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/TrashIcon.icns .
A continuación, utiliza los comandos siguientes para determinar la ubicación de la primera ocurrencia de la secuencia de bytes FD D9 2F A8
en el archivo TrashIcon.icns
. Tanto en bash
como en zsh
, la secuencia de bytes puede representarse como la cadena $'\xFD\xD9\x2F\xA8'
. Básicamente, cada byte está precedido por \x
y el resultado está precedido por $'
y seguido por '
. (Para una explicación del uso de los comandos, consulta esta respuesta).
(export LC_CTYPE=ASCII BS=$'\xFD\xD9\x2F\xA8'; cat TrashIcon.icns | tr -c "$BS" '\n' | grep -aoFbm1 "$BS" | sed 's/:.*//')
La salida de los comandos anteriores se muestra a continuación. Esta salida muestra que la secuencia de bytes comienza en el offset 1225184.
1225184
El siguiente comando copia el archivo TrashIcon.icns
comenzando en el offset 1225184 al archivo tempfile
. (Nota: 1225184=0x12b1e0
)
dd bs=1 skip=1225184 if=TrashIcon.icns of=tempfile
La salida del comando anterior se muestra a continuación.
939131+0 registros dentro
939131+0 registros fuera
939131 bytes transferidos en 3.128151 segundos (300219 bytes/s)
El siguiente comando reemplaza los primeros 4 bytes del archivo tempfile
con la cadena de caracteres ASCII de 4 bytes icns
.
echo -n "icns" | dd bs=1 of=tempfile conv=notrunc
El comando siguiente muestra los valores hexadecimales y ASCII de los primeros 32 bytes del archivo tempfile
. Nota: Los valores ASCII no imprimibles y los valores no ASCII se muestran como el carácter .
.
hexdump -Cv -n 32 tempfile
La salida del comando anterior se muestra a continuación. Los valores hexadecimales son los mismos que se muestran en la respuesta de Marc Wilson.
00000000 69 63 6e 73 00 0e 54 7b 69 63 31 32 00 00 10 fe |icns..T{ic12....|
00000010 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 |.PNG........IHDR|
00000020
El comando siguiente se puede usar para mostrar que tempfile
es un archivo de icono.
file tempfile
La salida del comando anterior se muestra a continuación.
tempfile: icono de Mac OS X, 939131 bytes, tipo "ic12"