|
|
|
|
del sitio de Google
|
|||||||
| Foros | Registro | Blog | Páginas man | Reglas de los Foros | Enlaces | Álbumes | Preguntas más frecuentes | Usuarios | Calendario | Búsqueda | Puestos de hoy | Marcar Foros Como Leídos |
| Programación de scripts de shell y Plantear preguntas sobre KSH, CSH, SH, BASH, PERL, PHP, SED, AWK y otros scripts de shell y lenguajes de script de shell aquí. |
![]() |
|
|
Herramientas de hilo | Buscar en este Hilo | Tasa de Hilo | Modos de visualización |
|
|||
|
eliminar octetos del archivo
Estoy haciendo un poco de la edición hexadecimal con dd y puedo sustituir valores bastante sencilla. Sin embargo, he ejecutar a través de una situación en la que tengo que borrar bytes en el archivo y no estoy seguro de cómo hacerlo. Por ejemplo:
Archivo de entrada tiene: 1234567890 De salida debe ser: 123abc90 He intentado esto: printf 1234567890> / tmp / prueba printf abc | dd bs \u003d 1 seek \u003d 0x03 count \u003d 5 \u003d conv notrunc of \u003d / tmp / prueba La salida es: 123abc7890 Otras cosas que he intentado: 1) en el SII y obs a diferentes tamaños 2) no utilizar la opción notrunc - después de todo lo que trunca la información que estoy insertando El archivo que estoy editando es un binario de Mac OS X, así que no puedo realmente utilizar la manipulación de texto - se ha de edición hexadecimal, por lo que estoy usando dd. No estoy atrapado en el uso de dd if algo más que hacer el trabajo, pero es lo que sé. Yo sólo uso de Unix para unos pocos proyectos de secuencias de comandos para hacer mi vida más fácil, por lo que probablemente sólo me falta un mando común que la mayoría de la gente que conozco. Alguna sugerencia? |
| Enlaces patrocinados |
|
|
|
|||
|
Gracias por la rápida respuesta! Que casi trabaja para mí. Tuve que buscar el cambio a 6, sin embargo, porque deja un caracter nulo después de 123abc. No aparece con el gato, sino un hexdump que se muestran. En cualquier caso, gracias por la ayuda!
|
|
|||
|
¡Soy yo de nuevo - Me han puesto a prueba en el archivo binario. Si bien esta solución funciona, se necesita mucho tiempo si el archivo es más grande que unos pocos kb de tamaño. La aplicación que estoy tratando de parche es 11MB, por lo que es todavía una hora más tarde. Tengo algunos de estos parches que hacer y no tengo una semana, por desgracia.
¿Hay otra manera más rápida de sustituir x octetos destructiva y con octetos si y <x? |
|
|||
|
El código cuenta con 17 contribuciones adicionales al proceso, pero para mi prueba, he usado dos. Además, tenga en mente que nunca llegó a través del primer ciclo. Sé que el ciclo de trabajo (el archivo apptest2 siguió creciendo, por kb lento kb), pero es demasiado lento teniendo en cuenta el tamaño total de aplicación es de 11 MB. Código:
offsets=(0x5766ee 0xb020ae)
length1=(8 8)
length2=(5 5)
replace=(HOCUS POKUS)
for ((i=0;$i<${#offsets[@]};i++)); do
# Enter in the correct value
printf ${replace[$i]} | dd bs=1 count="${length2[$i]}" seek="${offsets[$i]}" conv=notrunc of=apptest
# Create the infile
dd if=apptest bs=1 count="$((${offsets[$i]}+${length2[$i]}))" of=apptest2
# Splice infile into original
dd bs=1 skip="$((${offsets[$i]}+${length1[$i]}))" seek="$((${offsets[$i]}+${length2[$i]}))" of=apptest2
# Replace original so we can cycle
mv apptest2 apptest
doneHe intentado utilizar el printf para añadir la infile, pero que cambia el archivo del resultado final, que las ruinas de la aplicación. Yo no sé si podría usar dd para añadir al final, así que simplemente ha cambiado el orden para entrar en el valor correcto en primer lugar, luego de corte de seguridad del archivo. La parte del bucle trabaja en una fracción de segundo. Es la infile (y sospecho que el empalme, así como) que lleva tanto tiempo. |
|
||||
|
No entiendo este filetype arruinado la aplicación cosas. Tampoco entiendo por qué ese código que se ejecuta en todos los show. Mi dd Wil hexadecimal no aceptará la entrada.
0x5766ee \u003d 5727982 en decimal y haré uso de decimales en todo. He intentado esto en un archivo de 7000000 bytes y corre bastante rápido. Primero necesitamos una copia de nuestro archivo de entrada truncado a byte 5727981: dd if \u003d big1 bs \u003d 5727981 count \u003d 1 of \u003d big1a Ahora queremos una copia del archivo de entrada con el primer 5727989 octetos eliminado: dd if \u003d big1 bs \u003d 5727989 salto \u003d 1 \u003d de big1c Usted ya sabe cómo crear el archivo big1b que contiene los bytes de su revisión. Usted debe ser capaz de estos gatos juntos: gato big1a big1b big1c> Big2 Sin embargo, este archivo de negocio que pueden morder. Si es así probar: (dd if \u003d big1a bs \u003d 1000000; dd if \u003d big1b bs \u003d 1; dd if \u003d big1c bs \u003d 1000000) | dd bs \u003d 1000000 \u003d Big2 de |
| Enlaces patrocinados |
|
|
![]() |
| Marcadores |
| Herramientas de hilo | Buscar en este Hilo |
| Modos de visualización | Vota a este hilo |
|
|
Más UNIX y Linux Foro Temas usted puede encontrar útiles
|
||||
| Hilo | Hilo para principiantes | Foro | Respuestas | Último mensaje |
| Retire primero y el último N octetos N bytes de un archivo binario en AIX. | naveendronavall | Programación de scripts de shell y | 1 | 05-24-2008 12:06 PM |
| Cómo borrar inicial N bytes de la puesta en marcha del archivo con sed? | jockey007 | Programación de scripts de shell y | 3 | 11-19-2007 08:26 PM |
| Cómo borrar de la N octetos a partir del archivo de una función C? | jockey007 | Programación | 2 | 11-15-2007 10:25 PM |
| Reordenar octetos en un archivo txt | yankee428 | UNIX for Dummies Preguntas y Respuestas | 4 | 06-16-2005 02:55 PM |
| Tener un archivo del sistema y en la cinta y restaurar el archivo a 0 octetos | JackieRyan26 | UNIX for Dummies Preguntas y Respuestas | 1 | 09-06-2001 06:08 PM |