[20241114]建立完善mod_addr.sh脚本.txt
--//写一个简单修改内存地址相应值的gdb命令,主要gdb操作不支持rlwrap历史命令列表,这样操作快一些。
$ cat mod_addr.sh
#/bin/bash
# modify address value
# arg1=address arg2=offset (default 0) arg3=value (default 0)
offset=${2:-0}
value=${3:-0}
gdb -q -batch -p $(pgrep -f ora_mmon_${ORACLE_SID}) -ex "set *( int *)(0x${1}+0x${offset})=0x${value}" -ex "x /wx 0x${1}+0x${offset}" -ex "quit" | grep "^0x" | grep -v "^0x0"
--//简单测试:
SCOTT@book01p> alter session set session_cached_cursors=0;
Session altered.
--//这样每次都会软解析。
SCOTT@book01p> select * from dept where deptno=40;
DEPTNO DNAME LOC
---------- ------------------------------ -------------
40 OPERATIONS BOSTON
SCOTT@book01p> @ hash
HASH_VALUE SQL_ID CHILD_NUMBER KGL_BUCKET PLAN_HASH_VALUE HASH_HEX SQL_EXEC_START SQL_EXEC_ID
---------- ------------- ------------ ---------- --------------- ---------- ------------------- -----------
3912471479 14ymr4znm74xr 0 103351 2852011669 e93393b7 2024-11-14 09:18:39 16777216
SYS@book> oradebug setmypid
Statement processed.
SYS@book> oradebug dump library_cache 4;
Statement processed.
SYS@book> @ t
TRACEFILE
--------------------------------------------------------------------------------
/u01/app/oracle/diag/rdbms/book/book/trace/book_ora_3719.trc
$ grep 103351 /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_3719.trc
Bucket: #=103351 Mutex=0x7309f5c0(639950127104, 11, 0, 6)
--//mutex地址在0x7309f5c0。
$ disp_addr.sh 7309f5b0 0 12 wx
0x7309f5b0: 0x62b283d0 0x00000000 0x62b283d0 0x00000000
0x7309f5c0: 0x00000000 0x00000000 0x00000001 0x00000000
~~~~~~~~~~
0x7309f5d0: 0x000193b7 0x00000000 0x62820b38 0x00000000
--//修改下划线值。
$ ./mod_addr.sh 7309f5c8 0 0
0x7309f5c8: 0x00000000
$ disp_addr.sh 7309f5b0 0 12 wx
0x7309f5b0: 0x62b283d0 0x00000000 0x62b283d0 0x00000000
0x7309f5c0: 0x00000000 0x00000000 0x00000000 0x00000000
0x7309f5d0: 0x000193b7 0x00000000 0x62820b38 0x00000000
$ ./mod_addr.sh 7309f5c0 4 1
0x7309f5c4: 0x00000001
$ disp_addr.sh 7309f5b0 0 12 wx
0x7309f5b0: 0x62b283d0 0x00000000 0x62b283d0 0x00000000
0x7309f5c0: 0x00000000 0x00000001 0x00000000 0x00000000
0x7309f5d0: 0x000193b7 0x00000000 0x62820b38 0x00000000
--//这样会出现阻塞。
$ ./mod_addr.sh 7309f5c4 0 0
0x7309f5c4: 0x00000000
$ disp_addr.sh 7309f5b0 0 12 wx
0x7309f5b0: 0x62b283d0 0x00000000 0x62b283d0 0x00000000
0x7309f5c0: 0x00000000 0x00000000 0x00000001 0x000001c6
~~~~~~~~~~~~~~~~~~~~~~~~~~
0x7309f5d0: 0x000193b7 0x00000000 0x62820b38 0x00000000
--//gets数量+1,sleeps数量增加。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-3050261/ ,如需转载,请注明出处,否则将追究法律责任。