- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试读取文件的一些原始字节,所以我查看了文档并将一个函数放在一起,该函数看起来应该将字节读入一个向量并从头部开始读取 32 位整数。
fn filetobytes(name: &'static str) -> Vec<u8> {
let file = File::open(name).expect("No such file");
let filebytes: Vec<u8> = file.bytes().map(|readbyte| readbyte.unwrap()).collect();
return filebytes;
}
fn parse_int(index: usize, vector: &Vec<u8>) -> u32 {
let mut num: u32 = 0;
for i in 0..4 {
num = num << 8;
num = num | ((vector[index + i] as u32) & 0xff);
println!("Byte is {:x}", vector[index + i]);
}
return num;
}
fn main() {
let filebytes = filetobytes("diddy.h");
println!("0x{:x}", parse_int(0, &filebytes));
}
然后我尝试继续前进,但很快发现我的逻辑都不起作用。在做了一些嗅探之后,我发现我没有按照我预期的顺序获取字节。例如,上面的代码(分别打印前四个字节然后合成为一个整数)产生以下输出
Byte is 23
Byte is 64
Byte is 65
Byte is 66
0x23646566
如果我在 diddy.h
上执行 hexdump
,我会得到以下输出。
0000000 6423 6665 6e69 2065 4944 4444 5f59 4957
0000010 5444 2048 3031 0a35 6423 6665 6e69 2065
0000020 4944 4444 5f59 4548 4749 5448 3120 3035
0000030 630a 6e6f 7473 7520 736e 6769 656e 2064
0000040 6873 726f 2074 6964 6464 5f79 6164 6174
0000050 315b 3735 3035 3b5d 000a
0000059
奇怪的是,似乎vector[0]
访问字节1,vector[1]
访问字节0,vector[2]
获取字节 3,vector[3]
获取字节 2,依此类推。
我可能做了什么导致这种行为,我该如何解决?
最佳答案
Jan Zerebecki 的评论是正确的,但稍作阐述可能会有所帮助:
Hexdump 默认将文件显示为 16 位整数值的集合。它们出现“错误顺序”的原因是 Hexdump 尊重主机的字节顺序,而您在小端机器上运行它。
让我们使用 hexdump 的自定义输出格式选项做一个例子。首先,我们将编写一个与 xxd 兼容的十六进制转储,并将其转换为二进制。
$ echo 00000000: 01 23 45 67 89 ab cd ef > num.hex
$ xxd -r num.hex num.bin
然后我们将向自己证明 hexdump 可以使用规范输出模式读取它:
$ hexdump -C num.bin
00000000 01 23 45 67 89 ab cd ef |.#Eg....|
00000008
接下来,我们将使用它相当晦涩的输出格式选项将值显示为十六进制,但一次选择 1、2、4 和 8 个字节:
$ hexdump -e '1/1 "%02x "' num.bin
01 23 45 67 89 ab cd ef
$ hexdump -e '1/2 "%02x "' num.bin
2301 6745 ab89 efcd
$ hexdump -e '1/4 "%02x "' num.bin
67452301 efcdab89
$ hexdump -e '1/8 "%02x "' num.bin
efcdab8967452301
您看到的是 hexdump 将这些字节解释为不同大小的小端整数,并执行将最高有效数字放在左侧所需的字节交换......我们喜欢表示数字的方式。
关于file - 为什么 File::bytes 以不同于 hexdump 的顺序遍历字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46997109/
如何更改 hexdump 打印的列数从默认的 16(到 21)? 或者我在哪里可以找到更改 hexdump 中使用的默认 格式字符串的地方,以便修改那里使用的数字? 最佳答案 默认的格式好像是这样得到
我想输出一个 8go 文件的 hexdump 结果。可以一块一块地做吗?如何指定有限数量的行(我已经阅读了手册页,它似乎对应于 -n 长度,但它没有用) 最佳答案 像这样的东西?转储即字节 3600
当我在一个没有选项的文件上使用 hexdump 时,我得到了一行十六进制字节: cf fa ed fe 07 00 00 01 03 00 00 80 02 00 00 00 当我在同一个文件上使用
我不知道是哪个 hexdump() scapy 使用,因为我想修改它,但我根本找不到任何东西。 我发现的是: def hexdump(self, lfilter=None): for i in r
thegladiator:~/cp$ cat new.txt Hello World This is a Trest Progyy thegladiator:~/cp$ hexdump new.txt
我正在尝试生成恶意软件文件的 hexdump 的二元组,这将帮助我与基于二元组的不同恶意软件文件相关联,我正在尝试使用计数器、zip 和切片来获得结果,但却得到了一个错误。如果有人能帮助我,我会很高兴
我想获取给定函数的 hexdump。到目前为止,objdump -d a.out --start-address=0x400630 and --stop-address=0x400679 是我找到的最
在 linux 中处理 hexdump 命令真的很困惑。基本上我试图从/proc/device-tree 获取输出。我尝试使用 hexdump,但结果很困惑。我的dts包含 vvn = ; 我在/pr
有人可以告诉我 Linux 中 hexdump 命令的分数意味着什么吗 hexdump -v -e '7/4 "%010u "' -e '"\n"' binary-file-name 我相信它告诉
hexdump命令将任何文件转换为十六进制值。 但是如果我有十六进制值并且我想反转这个过程,这可能吗? 最佳答案 有一个类似的工具叫做xxd。如果您仅使用文件名运行 xxd,它会以相当标准的十六进制转
centos 6.5 - 运行 hexdump $ hexdump -C filecsv 00000000 44 4f 53 2c 20 50 61 74 69 65 6e 74 2c 20 41
以下 *nix 命令将 IP 和端口 (127.0.0.1:80) 的十六进制表示通过管道传输到 hexdump 命令中。 printf "\x7F\x00\x00\x01\x00\x50" | he
我正在寻找一种方法,可以使用 OCR 在此处可靠地提取图像的左侧(非 ascii 字符)。我有许多类似格式的图像,也显示了我想要提取的十六进制数据。 谁能推荐一种从这些图像中提取文本的方法? 理想情况
我正在使用 Catfish 查找包含特定文本的文件。找到的一些文件而不是纯文本包含一些看起来像十六进制转储的东西: 3c3f 7068 700a 0a66 756e 6374 696f 6e20 75
我用 C++ 编写了一个压缩文件的程序。 现在我想看看压缩文件的内容。 我使用了 hexdump 但我不知道十六进制数字是什么意思。 例如我有: 0000000 00f8 0000001 如何将其转换
我最近一直在将一些 C 代码移植到 C++。我有一个输出 hexdump 的函数,并将其从使用 printfs 更改为 couts(最终它将输出到文件,因此无论如何都会使用 c++ 流)。 示例代码如
我正在准备有关软件开发安全方面的讲座考试。我想知道是否总是可以使用 hexdump 从二进制文件中读取静态字符数组的值? 如果不是,那取决于什么因素,我是否可以使用 hexeditor 读取它的值??
当我在做“艰难地学习 C”的例子时,我心想: I set int a = 10; but where does that value 10 actually? Can I access it manu
我想像二进制编辑器一样显示转换为二进制的文件。 例如,它将 PNG 转换为 89 50 4E 47 0D 0A 1A 0A 00 00 00.... f = open(path, "r") print
我正在尝试通过在 Linux 上使用 binfmt_misc 注册一个特定程序来运行包含魔数(Magic Number)的二进制文件。 这是通过回显以下格式的字符串来完成的: :name:type:o
我是一名优秀的程序员,十分优秀!