我有一个内存转储文件,我可以在 Sublime 中以十六进制格式查看它,它如下所示:
7f45 4c46 0201 0100 0000 0000 0000 0000
0400 3e00 0100 0000 0000 0000 0000 0000
4000 0000 0000 0000 a003 2900 0000 0000
0000 0000 4000 3800 1600 4000 1800 1700
0400 0000 0400 0000 1005 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
我正在编写一个脚本来将内存转储划分为文件,每个文件仅包含一页(我的系统上为 4096,在 sublime 上应转换为 256 行)。我尝试了以下方法:
sed -n -e "${start},${end}p" $file1.dmp > $file2.dmp
这种方法的问题是 sed 的行数计数似乎与 sublime 不同。即使当我尝试将 $start
和 $end
都设置为 1 时,我也会得到巨大的输出(比原始文件少很多,但肯定不是一行)。head -n $num $file1.dmp > $file2.dmp
。它似乎与 sed 有同样的问题,复制的行数与 sublime 不同。cut -c 1-$num $file1.dmp > $file2.dmp
cat $file1.dmp | colrm $num > $file2.dmp
时,在file2中我发现当7f
等于1时为$num
,当7f45
等于2时为$num
,当7f45 4c
等于3时为$num
,但是当它4 岁我发现了这个:7f45 4c46 0201 0100 0000 0000 0000 0000
0400
随着数字变高,它仍然表现得很奇怪,突然添加两个十六进制数字或整行!
我已经用尽了我的选择,我认为部分问题是所有这些命令都将文件视为 utf8 并且对空字符表现不正确。无论如何,有什么方法可以将一个十六进制文件正确复制到另一个文件吗?
split
可以按字节数分割文件。
split -b 4K -d memory.dmp page