日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用Throwable获得栈信息

發(fā)布時間:2025/4/16 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Throwable获得栈信息 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

AOP(Aspect Oriented Programming面向切面編程)可以很輕松的控制一個方法調(diào)用哪些類,也能夠控制哪些方法允許被調(diào)用,一般來說切面編程(比如AspectJ)只能控制到方法級別,不能實現(xiàn)代碼級別的植入(Weave),比如一個方法被類A的m1方法調(diào)用時返回1,在類B的m2方法調(diào)用時返回0(同參數(shù)的情況下),這就要求被調(diào)用者具有識別調(diào)用者的能力.在這種情況下,可以使用Throwable獲得棧信息,然后鑒別調(diào)用者并分別輸出,代碼如下:

1 public class Client { 2 public static void main(String[] args) { 3 Invoker.m1(); 4 Invoker.m2(); 5 } 6 7 } 8 9 class Foo { 10 public static boolean m() { 11 // 取得當(dāng)前棧信息 12 StackTraceElement[] sts = new Throwable().getStackTrace(); 13 // 檢查是否是m1方法調(diào)用 14 for (StackTraceElement st : sts) { 15 if (st.getMethodName().equals("m1")) { 16 return true; 17 } 18 } 19 return false; 20 } 21 } 22 23 class Invoker { 24 // 該方法打印出true 25 public static void m1() { 26 System.out.println(Foo.m()); 27 } 28 29 // 該方法打印出false 30 public static void m2() { 31 System.out.println(Foo.m()); 32 } 33 }

Invoker類,兩個方法m1和m2都調(diào)用了Foo的m方法,都是無參調(diào)用,返回值卻不相同.這是因為Throwable類發(fā)揮效能了.

JVM在創(chuàng)建一個Throwable類及其子類時會把當(dāng)前線程的棧信息記錄下來,以便在輸出異常時準(zhǔn)確定位異常原因,看Throwable的源代碼...

public class Throwable implements Serializable {//出現(xiàn)異常的棧記錄private StackTraceElement[] stackTrace;//默認(rèn)的構(gòu)造函數(shù)public Throwable() {//記錄棧幀 fillInStackTrace();}//本地方法,抓取執(zhí)行時的棧信息public synchronized native Throwable fillInStackTrace() {} }

出現(xiàn)異常時(或主動聲明一個Throwabke對象時),JVM會通過fillInStackTrace方法記錄下棧幀信息,然后生成一個Throwable對象,這樣我們就可以知道類間的調(diào)用順序,方法名稱以及當(dāng)前行號等了.

獲得棧信息可以對調(diào)用者進(jìn)行判斷,然后決定不同的輸出,比如上面的m1和m2方法,同樣是輸入?yún)?shù),同樣的調(diào)用方法,但是輸出卻不同,這看起來像一個Bug:方法m1電泳m方法是正常顯示,而方法m2調(diào)用卻返回錯誤數(shù)據(jù).

因此我們雖然可以依據(jù)調(diào)用者不同產(chǎn)生不同的邏輯,但這僅僅局限在對方法的廣泛認(rèn)知上.

更多的時候我們用m方法的變形體代碼如下:

1 public class Client { 2 public static void main(String[] args) { 3 Invoker.m1(); 4 Invoker.m2(); 5 } 6 7 } 8 9 class Foo { 10 public static boolean m() { 11 // 取得當(dāng)前棧信息 12 StackTraceElement[] sts = new Throwable().getStackTrace(); 13 // 檢查是否是m1方法調(diào)用 14 for (StackTraceElement st : sts) { 15 if (st.getMethodName().equals("m1")) { 16 return true; 17 } 18 } 19 throw new RuntimeException("除m1方法外,該方法不允許其他方法調(diào)用"); 20 } 21 } 22 23 class Invoker { 24 // 該方法打印出true 25 public static void m1() { 26 System.out.println(Foo.m()); 27 } 28 29 // 該方法打印出false 30 public static void m2() { 31 System.out.println(Foo.m()); 32 } 33 }

只是把return false 替換成了一個運行期異常,除了m1方法外,其他方法調(diào)用都會產(chǎn)生異常.除了m1方法外,其他方法調(diào)用都會產(chǎn)生異常,該方法常用作離線注冊碼校驗,當(dāng)破解者試圖暴力破解時,由于主執(zhí)行者不善期望的值,因此會返回一個經(jīng)過包裝和混淆的異常信息,大大增加了破解的難度.

?


本文轉(zhuǎn)自SummerChill博客園博客,原文鏈接:http://www.cnblogs.com/DreamDrive/p/5622976.html,如需轉(zhuǎn)載請自行聯(lián)系原作者

總結(jié)

以上是生活随笔為你收集整理的使用Throwable获得栈信息的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲色图制服诱惑 | 色乱码一区二区三区在线男奴 | www.-级毛片线天内射视视 | 国产在线综合视频 | 国产午夜亚洲精品午夜鲁丝片 | a级片中文字幕 | 日韩精品在线免费观看视频 | 久久成人国产精品 | 欧美亚洲综合在线 | 日韩城人免费 | 欧美丰满一区二区免费视频 | 久久久.www| 91播放在线 | 亚洲AV乱码国产精品观看麻豆 | aaaaav| 人妻少妇精品无码专区二区 | 91色偷偷| 欧美又粗又长又爽做受 | 精品久久在线观看 | 久久av资源 | av天堂一区 | 8050午夜一级毛片久久亚洲欧 | 欧美精品videos | 老司机成人网 | 久久精品视频免费看 | 欧美视频性 | 国产日韩精品在线观看 | 91成人亚洲| 国产真实自拍 | 两个人做羞羞的视频 | 日韩午夜激情 | 日韩视频专区 | www.youjizz国产| 日b在线观看 | 神马福利视频 | 日韩婷婷| 深爱五月激情网 | 99久久婷婷国产一区二区三区 | 91在线免费网站 | 深爱五月激情网 | 日本啊啊视频 | 欧美国产成人精品一区二区三区 | 成人动漫在线观看视频 | 毛片久久久久久久 | 91激情在线观看 | 91国内精品久久久 | 日日干日日 | 婷婷777| 欧美视频一区在线 | 人妻一区二区三区 | av日韩在线免费观看 | 青青草国产一区二区三区 | 一区二区久久久 | 中文字幕第4页 | 毛片官网 | 国产精品入口66mio男同 | 久久久噜噜噜www成人网 | 国内精品久久久久久久久久久 | 亚洲一本之道 | 欧美一区二区三区在线 | 日韩三级av | 免费性爱视频 | 91高清视频在线观看 | 日韩一区在线观看视频 | 免费亚洲一区二区 | www在线看片 | 最近中文字幕在线中文高清版 | www三级| 蜜桃av噜噜一区二区三区 | 白白色视频在线 | 哺乳期给上司喂奶hd | 91久久人澡人人添人人爽欧美 | 色噜噜日韩精品欧美一区二区 | 性欧美一区二区三区 | 久久丝袜美腿 | 波多野结衣一区二区三区高清av | 综合激情久久 | 国产欧美一区二区三区国产幕精品 | 黄色xxx| 久久精品在线 | 变态另类一区二区 | 亚洲一级免费视频 | 国产美女91呻吟求 | 国产 中文 字幕 日韩 在线 | 成人无码精品1区2区3区免费看 | 午夜吃瓜| 日日夜夜爱爱 | 国产三级一区 | 精品视频一区二区 | 最新欧美日韩 | 和美女啪啪| ,午夜性刺激免费看视频 | 午夜视频www| 最近日本中文字幕 | 4hu最新网址 | 无码粉嫩虎白一线天在线观看 | 正在播放一区二区 | 国产精品探花视频 | 一本色道久久综合熟妇 |