2015-02-12 2 views
0

У меня очень ограниченное linux с несколькими базовыми командами linux. Мне нужно заменить несколько символов в шестнадцатеричном/двоичный файл:редактирование шестнадцатеричных/двоичных файлов в ограниченном linux

ВХОД:

# hexdump -C block.bin 
00000000 11 11 50 04 42 00 00 00 58 00 00 00 3c 0e e2 d4 |..P.B...X...<...| 
00000010 50 0b 00 00 00 80 00 00 00 00 00 00 00 00 d0 d7 |P...............| 
00000020 1f 09 00 00 00 00 02 00 00 00 00 04 ff ff ff ff |................| 
00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 
00000040 28 31 98 5b d3 0e 05 00 00 00 00 00 00 00 00 00 |(1.[............| 
00000050 00 00 00 00 00 00 00 00 64 00 00 00 00 00 10 00 |........d.......| 
00000060 00 ff ff ff ff 00 00 00 00 03 01 0d 03 01 0d 01 |................| 
00000070 00 00 00 00 0c 00 01 02 00 00 00 00 00 ff ff ff |................| 
00000080 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| 
* 
00000180 00 00 20 00 00 00 ff ff ff ff 01 00 00 0c 00 00 |.. .............| 
00000190 04 00 00 00 02 00 00 04 00 00 00 00 00 00 ff ff |................| 
000001a0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| 
* 
00000200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 

мне нужно изменить следующее:

00000060 00 ff ff ff ff 00 00 00 00 03 01 0d 03 01 0d 01 |................| 
00000070 00 00 00 00 0c 00 01 02 00 00 00 00 00 ff ff ff |................| 

(и переписать обратно в то же самое файл):

00000060 00 ff ff ff ff 00 00 00 00 03 01 0d 03 01 0d 02 |................| 
00000070 01 00 00 00 0c 00 01 02 00 00 00 00 00 ff ff ff |................| 

Как я уже сказал, у меня есть несколько команд: hexdump, od, vi , nano, awk, sed, python. Просматривая интернет, многие решения требуют сторонних установок или использования «xxd». И я не могу использовать.

Любые предложения?

Спасибо!

+0

Просьба уточнить точные требования. Вам нужно установить байт в фиксированном положении на фиксированное значение ('0000006f' на' 02'), или это сложнее? Зависит ли новое значение от старого, вы ищете конкретный шаблон вместо фиксированной позиции, что-то вроде этого. – Wintermute

+0

Без 'xxd', похоже, вам придется писать этот инструмент самостоятельно - ergo вы хотите язык программирования. Ознакомьтесь с ответами здесь: [чтение-бинарный файл-в-питоне] (http://stackoverflow.com/questions/1035340/reading-binary-file-in-python), чтобы начать. – n0741337

+0

Позиции фиксированы. '0000006f' и' 00000070' Требование состоит в том, чтобы увеличить оба байта на 1. thx –

ответ

2

Я не думаю, что попытка с помощью sed или awk - разумная идея, поэтому мы застряли с python, что, безусловно, достаточно мощно для этой задачи. Я думаю об этом:

#!/usr/bin/python 

# open file in binary mode for reading and writing  
f = open("block.bin", "r+b") 

# seek to position and read two bytes 
f.seek(0x6f) 
data = f.read(2) 

# seek to position again 
f.seek(0x6f) 

# and write the transformed characters back 
for d in data: 
    f.write(chr(ord(d) + 1)) 

f.close()