[20241112]验证sql_idz.sh计算PLSQL代码块2.txt

来源:这里教程网 时间:2026-03-03 20:49:59 作者:

[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

相关推荐