Go Back   El UNIX y Linux Foros > Arriba Foros > Programación de scripts de shell y
.
del sitio de Google



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

Closed Thread
English Japanese Spanish French German Portuguese Italian Powered by Powered by Google
 
Herramientas de hilo Buscar en este Hilo Tasa de Hilo Modos de visualización
  #1 (Enlace permanente)  
Old 04-12-2006
Usuario Registrado
 

Fecha: junio 2003
Puestos: 20
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
  #2 (Enlace permanente)  
Old 04-12-2006
Perderabo's Avatar
Unix demonio
 

Fecha: agosto 2001
Ubicación: Ashburn, Virginia,
Mensajes: 9.150

Código:
$ printf 1234567890 > test
$ dd if=test bs=1 count=3 of=test2
3+0 records in
3+0 records out
3 bytes transferred in 1 secs (3 bytes/sec)
$ printf abc >> test2
$ dd if=test bs=1 skip=8 seek=7 of=test2
2+0 records in
2+0 records out
2 bytes transferred in 1 secs (2 bytes/sec)
$ cat test2 ; echo
123abc90
$

  #3 (Enlace permanente)  
Old 04-12-2006
Usuario Registrado
 

Fecha: junio 2003
Puestos: 20
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!
  #4 (Enlace permanente)  
Old 04-12-2006
Usuario Registrado
 

Fecha: junio 2003
Puestos: 20
¡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?
  #5 (Enlace permanente)  
Old 04-12-2006
Perderabo's Avatar
Unix demonio
 

Fecha: agosto 2001
Ubicación: Ashburn, Virginia,
Mensajes: 9.150
Mostrar los comandos exacto que utilizó.
  #6 (Enlace permanente)  
Old 04-13-2006
Usuario Registrado
 

Fecha: junio 2003
Puestos: 20
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
done

He 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.
  #7 (Enlace permanente)  
Old 04-13-2006
Perderabo's Avatar
Unix demonio
 

Fecha: agosto 2001
Ubicación: Ashburn, Virginia,
Mensajes: 9.150
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
Closed Thread

Marcadores

Herramientas de hilo Buscar en este Hilo
Buscar en este Hilo:

Búsqueda avanzada
Modos de visualización Vota a este hilo
Vota a este hilo:

Normas de envío
puede que no nuevo puesto de hilos
puede que no enviar respuestas
puede que no enviar archivos adjuntos
puede que no editar sus puestos

Código BB es Encendido
Emoticones son Encendido
[IMG] código Encendido
Código HTML es Apagado
Trackbacks son Encendido
Pingbacks son Encendido
Refbacks son Apagado


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



Todas las horas son GMT -4. La hora es 12:20 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traducciones de idiomas Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Estudios
El UNIX y Linux Foros Content Copyright © 1993-2010. Toda la Administración de Derechos de Reserved.Ad por RedTyger

Las direcciones URL de contenido vBSEO 3.2.0