Solaris 模块调试器指南

mdb_dumpptr()mdb_dump64()

int mdb_dumpptr(uintptr_t addr, size_t nbytes, uint_t flags,

                     mdb_dumpptr_cb_t func, void *data);

int mdb_dump64(uint64_t addr, uint64_t nbytes, uint_t flags,

                     mdb_dump64_cb_t func, void *data);

这些函数可以用于生成列显到标准输出的带格式十六进制和 ASCII 数据转储。 每个函数都接受 addr 参数(指定起始位置)、nbytes 参数(指定要显示的字节数)、如下所述的一组标志、func 回调函数(用于读取要显示的数据)和作为其最后一个参数传递到回调 func 的每个调用的数据参数。这些函数在各方面都是相同的,只不过 mdb_dumpptr 使用 uintptr_t 作为其地址参数,而 mdb_dump64 使用 uint64_t。 例如,将 mdb_dump64mdb_pread 组合使用时,此不同是很有用的。 内置的 ::dump dcmd 使用这些函数执行其数据显示。

flags 参数应该是以下一个或多个值的按位 OR:

MDB_DUMP_RELATIVE

相对于起始地址而不是每行的显式地址的数字行。

MDB_DUMP_ALIGN

在段落边界上对齐输出。

MDB_DUMP_PEDANT

显示全宽地址,而不是截断地址以适合 80 列输出。

MDB_DUMP_ASCII

在十六进制数据的旁边显示 ASCII 值。

MDB_DUMP_HEADER

显示有关数据的标题行。

MDB_DUMP_TRIM

仅读取并显示指定地址的内容,而不是读取和列显整行。

MDB_DUMP_SQUISH

通过在与前面行重复的行上放置 "*" 来取消重复行。

MDB_DUMP_NEWDOT

将点的值更新为超过函数读取的最后一个地址的地址。

MDB_DUMP_ENDIAN

按字节存储顺序调整。 此选项假定字大小等于由 MDB_DUMP_GROUP() 指定的当前组大小。此选项将始终关闭对齐方式、标题和 ASCII 显示,以避免输出冲突。 如果使用 MDB_DUMP_ENDIAN 设置了 MDB_DUMP_TRIM,则转储的字节数将向下舍入到最接近的字大小字节。

MDB_DUMP_WIDTH(width)

增加所显示的每行 16 字节段落数。 width 的缺省值为 1,最大值为 16。

MDB_DUMP_GROUP(group)

将字节组大小设置为 group。 缺省 group 大小为 4 字节。 group 大小必须是 2 的幂,且可以整除行宽。