shell 从bash向文件写入特定的十六进制模式

gorkyyrv  于 2023-01-09  发布在  Shell
关注(0)|答案(6)|浏览(248)

我正在尝试做一些内存测试,并尝试从bash中将某个十六进制模式写入常规文件。如果不使用xxd或hexdump工具/命令,我将如何进行此操作?
谢谢你,尼哥

ki1q1bka

ki1q1bka1#

最简单的可能是:

printf '\xde\xad\xbe\xef' > file

但通常更方便的做法是

perl -e 'print pack "H*", "deadbeef"' > file
dwthyt8l

dwthyt8l2#

如果我没有理解错你的问题,printf应该做:

>printf %X 256
100
svdrlsy4

svdrlsy43#

你能用od -x来代替吗?这是相当普遍的,od从黎明就已经存在了[1]
[1]不算是时间的黎明。

vltsax25

vltsax254#

在bash中有多种方法可以实现这一点其中一种方法是
\x31“\”用于跳过bash解码中的下一个字符
'x'显示其十六进制数

echo -en \\x31\\x32\\x33 > test

-e以避免尾随行(否则0x 0A将在末尾附加)
-n解释反斜杠转义

vsikbqxv

vsikbqxv5#

内存测试是一个比在内存中阅读模式复杂得多的问题。内存测试对测试程序能做什么以及整个系统处于什么状态设置了相当严格的限制。从技术上讲,当你运行常规操作系统时,根本不可能测试100%的内存。
另一方面,您可以从shell运行一些真实的的测试程序,或者通过一些巧妙的技巧将测试安排在下一次 Boot 时执行,您可能想看看在Inquisitor中是如何完成的,即running memtester for in-OS testingscheduling memtest86* run on next boot
如果你必须继续使用当前启动的操作系统,那么memtester可能是你的首选工具--尽管注意它不是非常精确的内存测试。

w1e3prcc

w1e3prcc6#

有很多关于printf和echo的建议,但是有一个很小的区别。Printf不能产生零(二进制零),而echo可以正确地完成这项工作。考虑以下例子:

printf "\x31\x32\x00\x33\x00\x00\x00\x34">printf.txt
echo -en "\x31\x32\x00\x33\x00\x00\x00\x34">echo.txt

因此,printf.txt的大小为3个字节(是的,它写入第一个零并停止),echo.txt的长度为8个字节,包含实际数据。

相关问题