struct ktemh, 16 bytes @92
struct ktetb[1], 8 bytes @108
struct ktshc, 8 bytes @4148
struct ktsfs_seg[1], 20 bytes @4156
struct ktsfs_txn[16], 320 bytes @4176
ub4 tailchk @8188
BBED> print ktemh
struct ktemh, 16 bytes @92
ub4 count_ktemh @92 0x00000001
ub4 next_ktemh @96 0x00000000
ub4 obj_ktemh @100 0x0000003b
ub4 flag_ktemh @104 0x40000000
#################
ub4 obj_ktemh @100 0x0000003b
这一句描述的就是:root dba指向的object对象号:0x0000003b,依照以下方法转换为十进制,为:59
在数据库中据此对象号也可以查询出此表
BYS@ bys3>select to_number('3b','xxxxxxxxxx') from dual;
TO_NUMBER('3B','XXXXXXXXXX')
----------------------------
59
BYS@ bys3>select name from sys.obj$ where obj#=59; ---从数据库中也可以验证这个对象号指的是 BOOTSTRAP$
NAME
------------------------------
####################
5.使用BBED来验证BOOTSTRAP$表中OBJ#=0行记录是否存在于struct ktetb[1]指向的DBA 0x00400209中的信息
知道了BOOTSTRAP$对象号,那么BOOTSTRAP$记录的具体内容(select * from bootstrap$;) -存储在:file#1 block#520的struct ktetb[1]字段指向的块BBED> print ktetb --接上一步BBED操作
struct ktetb[0], 8 bytes @108
ub4 ktetbdba @108 0x00400209
ub4 ktetbnbk @112 0x00000007
BBED> set dba 0x00400209
DBA 0x00400209 (4194825 1,521)
BBED> set offset 8030
OFFSET 8030
--这个偏移量是书上看的,笨方法是把整个数据块8192字节都DUMP出来的16进制数全复制出来放在一个空文件中,然后使用第3步Ultraedit转换出来的16进制数字符,来查找,一个个查哈哈。
BBED> dump --DUMP出来的数据和第3步Ultraedit转换出来的16进制数字符可以一一对应
File: /u01/oradata/bys3/system01.dbf (1)
Block: 521 Offsets: 8030 to 8191 Dba:0x00400209
------------------------------------------------------------------------
2c010301 80018081 43524541 54452052 4f4c4c42 41434b20 5345474d 454e5420
53595354 454d2053 544f5241 47452028 2020494e 49544941 4c203131 324b204e
45585420 35364b20 4d494e45 5854454e 54532031 204d4158 45585445 4e545320
33323736 35204f42 4a4e4f20 30204558 54454e54 53202846 494c4520 3120424c
4f434b20 31323829 292c0103 033e6466 033e6466 09382e30 2e302e30 2e300106
e501
<32 bytes per line>