简而言之,我只是想知道SDB文件做什么以及它起什么作用。我看到Radare2正在使用它们。.这是我在./libr/bin/d/dll/下拥有的一些SDB文件,这些文件有什么用?

./libr/bin/d/dll/csmfpapi.sdb
./libr/bin/d/dll/atl.sdb
./libr/bin/d/dll/msvbvm60.sdb
./libr/bin/d/dll/msi.sdb
./libr/bin/d/dll/mfc90u.sdb
./libr/bin/d/dll/msvbvm50.sdb
./libr/bin/d/dll/dsound.sdb
./libr/bin/d/dll/mfc71.sdb
./libr/bin/d/dll/olepro32.sdb


#1 楼

SDB代表字符串数据库。


sdb是一个基于cdb磁盘的简单字符串键/值数据库
,并支持JSON和数组自省。


您可以看到与k命令一起列出的SDB命令,

|Usage: k[s] [key[=value]]Sdb Query
| k foo=bar                 set value
| k foo                     show value
| k                         list keys
| ko [file.sdb] [ns]        open file into namespace
| kd [file.sdb] [ns]        dump namespace to disk
| ks [ns]                   enter the sdb query shell
| k anal/meta/*             ist kv from anal > meta namespaces
| k anal/**                 list namespaces under anal
| k anal/meta/meta.0x80404  get value for meta.0x80404 key


radare2博客中有关于它的完整文章,请在此处查看。
您可以阅读在radare2的存储库中的此链接中,有更多关于此内容的信息。
在r2book中也有一个简短但不那么详细的章节。


编辑:您添加了另一个问题,所以我“
这些sdb文件包含./libr/bin/d/dll/中每个dll的函数名(DLL的导出)及其等效序号。每个文件都包含以下格式的键值行:

ordinal_num=export_name
another_ordinal_num=another_export_name


因此,如果我们从您提到的列表中获取msi.dll,其sdb文件将看起来像这样:

...
232=Migrate10CachedPackagesW
1=MsiAdvertiseProductA
223=MsiAdvertiseProductExA
224=MsiAdvertiseProductExW
2=MsiAdvertiseProductW
...


这些文件然后由MakeFile编译。要为DLL添加sdb文件,可以遵循radare2文档中的“ sdb_ordinal.md”文章。

评论


更新了问题。如果您可以扩展并专门讨论radare附带的sdb文件(现在是问题中),那真是太好了。

–埃文·卡洛尔(Evan Carroll)
18年1月25日在8:46

当然,已更新相关信息

–巨型甜菜
18年1月25日在10:08

还有Shim数据库:msdn.microsoft.com/en-us/library/bb432182%28v=vs.85%29.aspx也是.sdb文件

–安东·库科巴(Anton Kukoba)
18年1月26日在9:33