[20241112]验证sql_idz.sh计算PLSQL代码块2.txt
--//测试验证sql_idz.sh计算PLSQL代码块是否正确,我以前测试过
--//参考链接 :[20240902]验证sql_idz.sh计算PLSQL代码块.txt
1.环境:
SYS@book> @ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
--//grant execute on sys.dbms_lock to scott;
create procedure lcp
is
begin
sys.dbms_lock.sleep(3600);
end;
/
2.测试:
SCOTT@book> exec lcp
SYS@book> @ sharepool/shp4 '' 1715433582
HANDLE_TYPE KGLHDADR KGLHDPAR C40 KGLHDLMD KGLHDPMD KGLHDIVC KGLOBHD0 KGLOBHD6 KGLOBHS0 KGLOBHS6 KGLOBT16 N0_6_16 N20 KGLNAHSH KGLOBT03 KGLOBT09
---------------------- ---------------- ---------------- --------------- -------- ---------- ---------- ---------------- ---------------- ---------- ---------- ---------- --------- ---------- ---------- ------------- ----------
child handle address 000000008888F1C0 000000008888F550 BEGIN lcp; END; 1 2 0 0000000088AD5C10 0000000087AC6770 4488 12400 3049 19937 19937 1715433582 g097g0jm3yw3f 0
parent handle address 000000008888F550 000000008888F550 BEGIN lcp; END; 1 0 0 00000000877B4C38 00 4704 0 0 4704 4704 1715433582 g097g0jm3yw3f 65535
$ ext_kglob.sh 000000008888F550 1a8
(gdb) 0x8888f6f8: "BEGIN lcp; END;\n"
(gdb) quit
$ sql_idz.sh "BEGIN lcp; END;\n\0" 3
sql_text = BEGIN lcp; END;\n\0
full_hash_value(16) = 53975D1AA6F69DF9EE36A6C55F8DD007 or 53975d1aa6f69df9ee36a6c55f8dd007
xxxxx_matching_signature(10) = -1281653677298429945 or 17165090396411121671
hash_value(10) = 1603129351 or hash_value(16) = 5F8DD007 or 5f8dd007
sql_id(16) = EE36A6C55F8DD007 or ee36a6c55f8dd007
sql_id(32) = fwdp6spgsvn07
sql_id(32) = fwdp6spgsvn07
sql_id(32) = fwdp6spgsvn07
--//计算不对。
--//使用md5.gdb跟踪。
Breakpoint 1, 0x00000000097dc75c in kggmd5Update ()
Length: 18
0x7ffc88028588: 66 'B' 69 'E' 71 'G' 73 'I' 78 'N' 32 ' ' 108 'l' 99 'c'
0x7ffc88028590: 112 'p' 59 ';' 32 ' ' 69 'E' 78 'N' 68 'D' 59 ';' 10 '\n'
0x7ffc88028598: 0 '\000' 0 '\000'
--//代码如下:
BEGIN lcp; END;\n\0\0
--//结尾是\0\0.
$ sql_idz.sh "BEGIN lcp; END;\n\0\0" 3
sql_text = BEGIN lcp; END;\n\0\0
full_hash_value(16) = FEE7CD985905C2A1F024EF04663F706E or fee7cd985905c2a1f024ef04663f706e
xxxxx_matching_signature(10) = -1142525603270922130 or 17304218470438629486
hash_value(10) = 1715433582 or hash_value(16) = 663F706E or 663f706e
sql_id(16) = F024EF04663F706E or f024ef04663f706e
sql_id(32) = g097g0jm3yw3f
sql_id(32) = g097g0jm3yw3f
sql_id(32) = g097g0jm3yw3f
--//这样计算正确。
--//为什么出现\0\0呢。
--//实际上真正执行的是这样。
BEGIN lcp; END;
/
--//[20240902]验证sql_idz.sh计算PLSQL代码块.txt的测试完全不同,这里补了两个\0.
3.md5.gdb代码:
set pagination off
set logging file /tmp/md5.log
set logging overwrite on
set logging on
break kggmd5Update
commands
printf "Length: %d\n",$rdx
x/18xc $rsi
c
end
break kglComputeHash
commands
c
end
break kggmd5Process
commands
c
end
break kggmd5Finish
commands
c
end
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-3048672/ ,如需转载,请注明出处,否则将追究法律责任。