Use dd para extrair uma parte precisa de um arquivo?

1

Eu tenho um arquivo 588Ko e quero extrair bytes de 0x7E8D6 para 0x8AD5D. Eu tentei:
dd if=file of=result bs=50311 count=1 skip=518358

  • 50311 significa 0x8AD5D - 0x7E8D6
  • 518358 significa 0x7E8D6 (de onde eu quero cortar)

dd me diz que não pode pular para o deslocamento especificado. O que eu posso fazer? Existe algum outro utilitário para fazer isso?

    
por Nark 18.06.2018 / 20:49

2 respostas

3

skip e count são ambos expressos em blocos. Você está pedindo para pular 518358 × 50311 bytes.

dd pode deixar os erros não serem detectados , por isso é melhor evitar de qualquer maneira.

Com a maioria das variantes do Unix (incluindo o BusyBox, mas não o OpenSBD), você pode passar um número de bytes para head e tail . Lembre-se de que tail conta a partir de 1.

<file tail -c "$((0x7E8D6 + 1))" | head -c "$((0x8AD5D - 0x7E8D6))" >result
    
por 18.06.2018 / 20:57
1

Use o dd para extrair uma parte precisa de um arquivo?

Permite ajustar um pouco a sua sintaxe.

bs = 1

Defina o tamanho do bloco como um por causa de qualquer contagem ou pulo que você deseja estar em blocos únicos ou bytes.

skip = 518358

Ignore estes muitos blocos ou bytes no início do fluxo.

contagem = 50311

Copie muitos blocos ou bytes do fluxo.

dd if=/path/file of=/path/result bs= count=50311 skip=518358

    
por 18.06.2018 / 21:03

Tags