Dd
僅更改文件中的一位
我必須測試一個雜湊函式,並且我只想更改特定文件的一個位。
我嘗試使用 dd 命令。那行得通,但是我只能更改整個字節,而不僅僅是一點。
sudo dd if=/dev/zero of=/file.bin bs=1 seek=10 count=1 conv=notrunc
我還嘗試了帶有正則表達式的 sed 命令,但由於我不知道文件的內容,我不能只將“a”更改為“b”。
有誰知道這樣做的命令?
由於文件可能包含空值,因此面向文本的過濾器
sed
將失敗。但是您可以使用可以處理空值的程式語言,例如perl
orpython
。這是 Python 3 的解決方案。為了可讀性,它比嚴格必要的要長幾行。#!/usr/bin/env python3 """Toggle the bit at the specified offset. Syntax: <cmdname> filename bit-offset""" import sys fname = sys.argv[1] # Convert bit offset to bytes + leftover bits bitpos = int(sys.argv[2]) nbytes, nbits = divmod(bitpos, 8) # Open in read+write, binary mode; read 1 byte fp = open(fname, "r+b") fp.seek(nbytes, 0) c = fp.read(1) # Toggle bit at byte position `nbits` toggled = bytes( [ ord(c)^(1<<nbits) ] ) # print(toggled) # diagnostic output # Back up one byte, write out the modified byte fp.seek(-1, 1) # or absolute: fp.seek(nbytes, 0) fp.write(toggled) fp.close()
將其保存在文件中(例如
bitflip
),使其可執行,然後使用要修改的文件名和以 bits為單位的偏移量執行它。請注意,它會修改文件。以相同的偏移量執行兩次,您將恢復文件。