[20241114]建立完善mod_addr.sh脚本.txt

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

[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数量增加。

相关推荐