[20260824]数字字典对象hash的计算验证.txt
--//前面的测试已经猜测数据字典对象hash的大致计算方法。拿来验证看看。
1.环境:
SYS@book> @ ver2
==============================
PORT_STRING : x86_64/Linux 2.4.xx
VERSION : 21.0.0.0.0
BANNER : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
BANNER_FULL : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
BANNER_LEGACY : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
CON_ID : 0
PL/SQL procedure successfully completed.
SYS@book> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED MOUNTED
3 BOOK01P READ WRITE NO
--//Scott.dept表在pdb_name=BOOK01P里面。
$ cat ora_hash1.txt
select
ora_hash('&&1',4294967295,&2) n20
,to_char(ora_hash('&1',4294967295,&2),'FM0xxxxxxxxxxxxxxx') c20
from dual;
$ cat ora_hash2.txt
select
ora_hash(UTL_RAW.cast_to_varchar2(hextoraw('&1')),4294967295,&2) n20
,to_char(ora_hash(UTL_RAW.cast_to_varchar2(hextoraw('&1')),4294967295,&2),'FM0xxxxxxxxxxxxxxx') c20
from dual;
2.简单验证:
--//至少前面计算已经知道一种计算dc_objects对象hash值的方法,就是object_id,pdb_name的方式。
SCOTT@book01p> @ oname scott.^dept$
OWNER OBJECT_NAME OBJECT_TYPE SUBOBJECT_NAME CREATED LAST_DDL_TIME STATUS DATA_OBJECT_ID OBJECT_ID
----- ----------- ----------- -------------- ------------------- ------------------- --------- -------------- ----------
SCOTT DEPT TABLE 2026-06-25 09:20:13 2026-06-25 09:20:13 VALID 75828 75828
SCOTT@book01p> @ 10to16 75828
10 to 16 HEX (LOWER) 10 TO 16 HEX (UPPER) REVERSE16_LOWER REVERSE16_UPPER
-------------------- -------------------- -------------------- --------------------
0000000000012834 0000000000012834 0x34280100-00000000 0X34280100-00000000
--//大小头对调就是0x34280100.
SCOTT@book01p> @ ora_hash2.txt 34280100 0
N20 C20
--------------------- --------------------
2945036863 00000000af89b23f
SCOTT@book01p> @ ora_hash1.txt BOOK01P 2945036863
N20 C20
--------------------- --------------------
4272700920 00000000feac3df8
--//4272700920 % 32768 = 15864,dept对象的hash=15864.
--//简单的执行desc dept,查询v$rowchache_parent就可以获得scott.dept数据字段信息。
SYS@book> @ dc/dc_objects "DC_OBJ_NAME='DEPT'"
USERNAME DC_OBJ_NAME KEY_STR_LEN HASH_HEX INDX HASH ADDRESS CACHE# CACHE_NAME EXISTENT LOCK_MODE LOCK_REQUEST SADDR INST_LOCK_REQUEST INST_LOCK_RELEASE IN INST_LOC INST_LOC CON_ID
-------- ----------- ----------- -------- ------ ------ ---------------- ------ ---------- -------- ---------- ------------ ---------------- ----------------- ----------------- -- -------- -------- ------
SCOTT DEPT 4 0x3df8 7847 15864 00000000636752C0 8 dc_objects Y 0 0 00 0 0 00 00 3
SCOTT DEPT 4 0x2271 3304 8817 00000000636752C0 8 dc_objects Y 0 0 00 0 0 00 00 3
--//存在一条hash=15864记录,可以发现还存在另外一条记录hash值不同,也就是存在另外的算法,注意address相同,也就是两者指向的对
--//象相同.当然盲猜有点难度,直接使用前面写bpftrace脚本看看采用计算的信息.
3.继续:
SYS@book> alter system flush SHARED_POOL;
System altered.
SYS@book> @ dc/dc_objects "DC_OBJ_NAME='DEPT'"
no rows selected
--//session 1:
SCOTT@book01p> @ spid
==============================
SID : 30
SERIAL# : 52788
PROCESS : 3807
SERVER : DEDICATED
SPID : 3809
PID : 8
P_SERIAL# : 7
KILL_COMMAND : alter system kill session '30,52788' immediate;
PL/SQL procedure successfully completed.
--//window 1:
# bpftrace ./dc_hash.bt 3809
--//session 1:
SCOTT@book01p> @ desc dept
Name Null? Type
------------------------------- -------- ----------------------------
1 DEPTNO NOT NULL NUMBER(2)
2 DNAME VARCHAR2(14)
3 LOC VARCHAR2(13)
--//window 1,输出一大堆信息。查看检索HASH=15864,8817的记录。
krqhsh Begin
[15:57:23] kgghash #11 pid=3809 hash_text=m\x00\x00\x00\x04\x00DEPT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 length=528 seed=0
[15:57:23] kgghash #11 pid=3809 return hash_value=000000001f71eba5 527559589 0000000000006ba5 27557
[15:57:23] kgghash #12 pid=3809 hash_text=BOOK01P length=7 seed=1f71eba5
[15:57:23] kgghash #12 pid=3809 return hash_value=000000000d782271 225976945 0000000000002271 8817
krqhsh End
krqhsh Begin
[15:57:23] kgghash #07 pid=3809 hash_text=4(\x01\x00 length=4 seed=0
[15:57:23] kgghash #07 pid=3809 return hash_value=00000000af89b23f 2945036863 000000000000323f 12863
[15:57:23] kgghash #08 pid=3809 hash_text=BOOK01P length=7 seed=af89b23f
[15:57:23] kgghash #08 pid=3809 return hash_value=00000000feac3df8 4272700920 0000000000003df8 15864
krqhsh End
--//bpftrace的buf有一个"缺陷",可显示的字符直接显示,hash=15864,显示的信息如下:
--//hash_text=4(\x01\x00
SYS@book> select to_char(ascii('4'),'xx') c10 ,to_char(ascii('('),'xx') c10 from dual ;
C10 C10
---------- ----------
34 28
--//对应的raw就是 34280100,与前面的@ 10to16 75828输出一样。
SYS@book> @ ora_hash1.txt "4('||chr(1)||chr(0)||'" 0
N20 C20
--------------------- --------------------
2945036863 00000000af89b23f
SCOTT@book01p> @ ora_hash2.txt 34280100 0
N20 C20
--------------------- --------------------
2945036863 00000000af89b23f
--//两种方法计算一致。
--//解析 hash= 8817的情况:
--//直接输入raw字符串报错。
SYS@book> @ ora_hash2.txt 6d0000004... 0
string beginning "6d00000000..." is too long. maximum size is 239 characters.
--//参数1太长了。
--//使用gdb跟踪,跟踪脚本适当修改如下:
$ cat dc_hash.gdb
set pagination off
break kqrhsh
commands
silent
printf "=== kqrhsh BEGIN ===\n"
continue
end
break *0x000000001501a2df
commands
silent
printf "=== kqrhsh END ===\n\n"
continue
end
#break kgghash
break kgghash if $rsi == 528 && $edx == 0
commands
silent
printf "kgghash(ptr=0x%lx, len=%lu, seed=0x%x)\n", $rdi, $rsi, $edx
# printf "对齐检查: %s (偏移+%d)\n", ($rdi & 3) == 0 ? "4字节对齐" : "未对齐", $rdi & 3
printf "原始数据: \n"
x/s $rdi
x/528bx $rdi
# printf "按uint32: 0x%08x 0x%08x\n\n", *(unsigned int*)$rdi, *(unsigned int*)($rdi+4)
# printf "现在可以 stepi 单步跟踪,或用 finish 直接看返回值\n"
continue
end
break *0x000000001532063b
commands
silent
printf "kgghash retuen value(rax) = 0x%016lx %ld , mod 32768 = 0x%08x %d\n\n", $rax,$rax, $rax & 0x7fff, $rax & 0x7fff
#printf "低32位 eax = 0x%08x (期望 0xceb5d99e)\n", $eax
continue
end
echo [+] Breakpoint set on kgghash, continuing...\n
continue
--//执行desc dept前加下跟踪进程spid=3174,执行如下:
$ gdb -f -p 3174 -x dc_hash.gdb
SYS@book> alter system flush SHARED_POOL;
System altered.
SYS@book> @ dc/dc_objects "DC_OBJ_NAME='DEPT'"
no rows selected
--//gdb跟踪相关信息如下:
=== kqrhsh BEGIN ===
kgghash(ptr=0x7ffeccf056e0, len=528, seed=0x0)
原始数据:
0x7ffeccf056e0: "m"
--//x/s $rdi 仅仅显示m,因为后面出现0x00,被截断了。
0x7ffeccf056e0: 0x6d 0x00 0x00 0x00 0x04 0x00 0x44 0x45
0x7ffeccf056e8: 0x50 0x54 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf056f0: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf056f8: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05700: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05708: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05710: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05718: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05720: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05728: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05730: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05738: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05740: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05748: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05750: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05758: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05760: 0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x00
~~~~~
0x7ffeccf05768: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05770: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05778: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05780: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05788: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05790: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05798: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf057a0: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf057a8: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf057b0: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf057b8: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf057c0: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf057c8: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf057d0: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf057d8: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf057e0: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf057e8: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf057f0: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf057f8: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05800: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05808: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05810: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05818: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05820: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05828: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05830: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05838: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05840: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05848: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05850: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05858: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05860: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05868: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05870: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05878: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05880: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05888: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05890: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf05898: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf058a0: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf058a8: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf058b0: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf058b8: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf058c0: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf058c8: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf058d0: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf058d8: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf058e0: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7ffeccf058e8: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
kgghash retuen value(rax) = 0x000000001f71eba5 527559589 , mod 32768 = 0x00006ba5 27557
--//m 的ascii码 0x6d = 109,正好对应scott用户的user_id.
SYS@book> column user_id format 99999
SYS@book> select USERNAME,USER_ID from cdb_users where con_id=3 and username='SCOTT';
USERNAME USER_ID
------------------ -------
SCOTT 109
--//后面的 0x04 0x00 0x44 0x45 0x50 0x54 解析如下:
--//0x04 0x00 表示table name字符串长度等于4.
--//0x44 0x45 0x50 0x54 = DEPT
--//后面基本都是00,除了下划线位置出现01,我估计表示namespace=1.
--//开头 6D000000040044455054
--//14*8+6+6 = 124 个00
--//01
--//49*8+1 = 393个00
--//393*2 = 786
--//连在一起拼接如下:
SYS@book> @ ora_hash2.txt "6D000000040044455054' || LPAD('0', 248, '0')||'01'||lpad('0',784,'0')||'00" 0
N20 C20
--------------------- --------------------
527559589 000000001f71eba5
--//kgghash retuen value(rax) = 0x000000001f71eba5 527559589 , mod 32768 = 0x00006ba5 27557
--//完全对上。
SYS@book> @ ora_hash1.txt BOOK01P 527559589
N20 C20
--------------------- --------------------
225976945 000000000d782271
--//225976945 % 32768= 8817
SYS@book> @ dc/dc_objects "DC_OBJ_NAME='DEPT'"
USERNAME DC_OBJ_NAME KEY_STR_LEN HASH_HEX INDX HASH ADDRESS CACHE# CACHE_NAME EXISTENT LOCK_MODE LOCK_REQUEST SADDR INST_LOCK_REQUEST INST_LOCK_RELEASE IN INST_LOC INST_LOC CON_ID
-------- ----------- ----------- -------- ------ ------ ---------------- ---------- -------------------- -------- ---------- ------------ ---------------- ----------------- ----------------- -- -------- -------- ------
SCOTT DEPT 4 0x3df8 5051 15864 00000000708AD650 8 dc_objects Y 0 0 00 0 0 00 00 3
SCOTT DEPT 4 0x2271 2308 8817 00000000708AD650 8 dc_objects Y 0 0 00 0 0 00 00 3
--//实际上v$rowcache_parent的key信息就是数据字典对象的相关数据,只不过仅仅显示raw类型的100字符。
SYS@book> @ descv v$rowcache_parent key|cache
Name Null? Type
------------------------------- -------- ----------------------------
4 CACHE# NUMBER
5 CACHE_NAME VARCHAR2(64)
16 KEY RAW(100)
SYS@book> @ fchaz 00000000708AD650
LOC KSMCHPTR KSMCHIDX KSMCHDUR KSMCHCOM KSMCHSIZ KSMCHCLS KSMCHTYP KSMCHPAR KSMCHPTR_BEGIN KSMCHPTR_END+1
---- ---------------- ---------- ---------- -------------------------------- ---------- -------- ---------- ---------------- ---------------- -----------------
VSGA 00000000708AD620 1 1 KQR PO 1328 recr 584 00 00000000708AD620 00000000708ADB50
SYS@book> @ opeek 00000000708AD650 1328 1
New tracefile_identifier = /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_3184_0001.trc
[0708AD650, 0708ADB80) = 00000001 00000002 00000008 00000001 00000001 00000000 708ADA30 00000000 00000000 00000000 708AD678 00000000 708AD678 00000000 ...
--//查看跟踪文件:
*** 2026-08-25T09:33:32.986178+08:00 (CDB$ROOT(1))
Processing Oradebug command 'peek 0x00000000708ad650 1328 1'
[0708AD650, 0708ADB80) = 00000001 00000002 00000008 00000001 00000001 ...
Dump of memory from 0x0708AD664 to 0x0708ADB80
0708AD660 00000000 708ADA30 00000000 [....0..p....]
0708AD670 00000000 00000000 708AD678 00000000 [........x..p....]
0708AD680 708AD678 00000000 00000000 00000000 [x..p............]
0708AD690 00000000 00000000 00000000 00000000 [................]
Repeat 8 times
0708AD720 708AD720 00000000 708AD720 00000000 [ ..p.... ..p....]
0708AD730 708AD730 00000000 708AD730 00000000 [0..p....0..p....]
0708AD740 00000000 00000000 00000000 00000000 [................]
0708AD750 00000003 6E20BF17 00000000 00000000 [...... n........]
0708AD760 00000009 00000000 00000000 00000000 [................]
0708AD770 0001000E 00000000 00000000 00000000 [................]
0708AD780 00000000 00000000 00000000 00000000 [................]
0708AD790 00000000 00000000 0000006D 45440004 [........m.....DE]
~~~~~~~~~~~~~~~~~
0708AD7A0 00005450 00000000 00000000 00000000 [PT..............]
~~~~~~~~
0708AD7B0 00000000 00000000 00000000 00000000 [................]
Repeat 5 times
0708AD810 00000000 00000000 00000000 00010000 [................]
~~~~~~~~
0708AD820 00000000 00000000 00000000 00000000 [................]
Repeat 23 times
0708AD9A0 00000000 00000000 00012834 00000001 [........4(......]
~~~~~~~~
0708AD9B0 00012834 067E7802 0E150A19 19067E78 [4(...x~.....x~..]
0708AD9C0 780E150A 0A19067E 00010E15 00000000 [...x~...........]
0708AD9D0 00000000 00000000 00000000 00000000 [................]
0708AD9E0 00000000 00000000 00000006 0000006D [............m...]
0708AD9F0 08003DEF 00000000 00000000 5D3E06CC [.=............>]]
0708ADA00 4BDA3CE0 BA8BC59F BF52A709 00000001 [.<.K......R.....]
0708ADA10 00003FFE 00000000 00000000 00000000 [.?..............]
0708ADA20 00000000 00000000 00000000 00000000 [................]
0708ADA30 00000200 0D782271 708AD650 00000000 [....q"x.P..p....]
0708ADA40 778670A8 00000000 778670A8 00000000 [.p.w.....p.w....]
0708ADA50 00000001 FEAC3DF8 708AD650 00000000 [.....=..P..p....]
0708ADA60 77882918 00000000 77882918 00000000 [.).w.....).w....]
0708ADA70 00000000 00000000 00000000 00000000 [................]
Repeat 13 times
0708ADB50 00000931 80B38F00 708AD620 00000000 [1....... ..p....]
0708ADB60 697816E0 00000000 62ECF560 00000000 [..xi....`..b....]
0708ADB70 68ACFDC0 00000000 00000003 00000248 [...h........H...]
*** 2026-08-25T09:33:32.998367+08:00 (CDB$ROOT(1))
--//下划线开始的位置对应的就是key信息,长度528. 注意intel cpu 大小头问题.
4.小结:
--//可以看出数据字典对象可能1个对象对应多个hash值,参与计算的方法不同。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-3180876/ ,如需转载,请注明出处,否则将追究法律责任。