使用 hexdump 输出 64 位整数

Lar*_*idi 5 c++ binary 64-bit hexdump reverse-engineering

我目前正在处理一些二进制数据。为了检查和调试我的应用程序先前生成的数据,我使用hexdump,面临 hexdump 似乎无法提取 64 位整数字段的障碍。鉴于以下最小示例:

#include <iostream>
#include <fstream>
#include <cstdint>

int main(int argc, char** argv){
    std::ofstream os("tmp.bin", std::ios::out | std::ios::binary);
    uint64_t x = 7;
    os.write((char*)&x,sizeof(uint64_t));
    os.close();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在我的系统上执行一个简单的十六进制转储:

hexdump tmp.bin

> 0000000: 0007 0000 0000 0000
> 0000008:
Run Code Online (Sandbox Code Playgroud)

现在尝试提取 64 位宽度的 unsigned int 产生:

hexdump -e '/8 "%u"' tmp.bin

> hexdump: bad byte count for conversion character u
Run Code Online (Sandbox Code Playgroud)

根据David Mair写得很好的hexdump-manual应该可以做到,但我没有成功。

我错过了什么?

Lar*_*idi 3

我们最终的解决方法如下:

x=`hexdump -n 8 -e '2/4 "%08X " "\n"' {FILENAME} | awk 'BEGIN{printf "0x"}{print $2$1}'`
echo $(($x))
Run Code Online (Sandbox Code Playgroud)

各部分解释: