什么是伯克利 DB 幻数?
Posted
技术标签:
【中文标题】什么是伯克利 DB 幻数?【英文标题】:What is the Berkeley DB Magic Number? 【发布时间】:2015-08-17 06:33:35 【问题描述】:具有原生字节顺序的 Berkeley DB v9 Btree 的幻数是多少?幻数是否有特定的长度或识别它们的简单方法?
【问题讨论】:
是什么让你认为有是一个“神奇的数字”?您是否知道数据文件的二进制格式足以知道有这样一个数字,但不知道实际数字?如果您非常了解二进制文件,那么您应该知道数字在哪里,因此可以自己找到它。而且不能直接下载源代码看看吗?它是双重许可的,其中一个许可是开源许可,或者您不想创建一个 Oracle 帐户?看看旧的 Oracle 之前的版本怎么样? 我知道它有一个,因为 *nix file 命令。这就是它识别文件的方式,就想要它的原因而言,我需要它在文件系统严重混乱的磁盘上进行文件雕刻。 Linuxfile
命令的源代码中似乎有一个条目,用于 Berkeley DB Btree 幻数。从 Ubuntu/Debian apt-get source file
获取 file
源代码,然后查看 ./file-5.14/magic/Magdir/database
。我不太关心将此文本输入文件的格式解码为file
,但也许你会这样做。
@Paul apt 告诉我它找不到它的源包:/ 到 Google
@Scoopta 我尝试在裸机 ubuntu 15.04 上运行,发现我需要先apt-get update; apt-get dpkg-dev
,然后是apt-get source file
。请注意,dpkg-dev
将安装 patch
、gcc
等...
【参考方案1】:
如您所见,它是0x00053162
。我假设本机字节顺序,您的意思是 x86 本机字节顺序?如果你 hexdump 文件,你会看到它在字节 12-15,字节交换(如 3162 0005,因为它是 x86):
hexdump blah.db | head -1
0000000 0001 0000 9fbc 0009 0000 0000 3162 0005
0000010 0009 0000 1000 0000 0900 0001 0000 0000
版本在下一个uint32_t
,字节16-19。在这里,它是0009 0000
,它是小端语言的第 9 版。事实上,从偏移量 12 开始的整个字节序列看起来是一个struct __db_bt_stat
,其内容在db_stat
(或Db::stat
)的联机帮助页中给出:http://www.mit.edu/afs.new/athena/astaff/source/src-9.0/third/db/docs/api_cxx/Db/stat.html
【讨论】:
非常感谢。我没有意识到 x86 是字节交换的。现在这很有意义。以上是关于什么是伯克利 DB 幻数?的主要内容,如果未能解决你的问题,请参考以下文章