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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

静态分析android代码, 循环与trycatch

發布時間:2025/3/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 静态分析android代码, 循环与trycatch 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一:閱讀dalvik字節碼,可用ida閱讀dex, 或直接文本閱讀smali文件

二:閱讀java源碼,可用dex2jar生成jar文件,再使用jd-gui來閱讀jar文件的源碼。

Android.intent.category.LAUNCHER 在程序列表中可見。

1.??????????? application類用于組件之間傳遞全局變量在主activity啟動之前做一些工作,主activity可以通過AndroidManifest.xml中的android.intent.action.MAIN來定位。

2.??????????? dex文件的數據結構大部分在dalvik\libdex\DexFile.h中,可以整理成ida的idc腳本來導入ida6.1中。

3.??????????? ida分析中,imp表明該方法為androidSDK中的API,@后為聲明,類名與方法名用_分開,并且能識別隱參數this,由于this取代p0, 則后面的參數命名都依次-1.

4.??????????? 1.??????????? d2j-dex2jar? xxx.apk?????????????????????? 2.?? Ja-gui

?

Smali文件格式:

//smali文件的頭三行描述類信息

.class <訪問權限>[修飾關鍵字]<類名>

.super<父類名>

.source<源文件名>

#static fields

.field<訪問權限>static[修飾關鍵字]<字段名>:<字段類型>

#instance fields

.field<訪問權限>[修飾關鍵字]<字段名>:<字段類型>

#direct methods

.method <訪問權限> [修飾關鍵字] <方法原型>

??????????????? <.locals>????????????? #局部變量數

??????????????? [.parameter]????? #dalvik使用.parameters指定參數個數,而這表示一個參數,多個參數者出現多個.parameter.

??????????????? [.prologue]???????? #代碼開始處

??????????????? [.line]??????????????????? #指定該處指令在源碼中行號

??????????????? <代碼體>

.end method

#interfaces

.implements <接口名>

如何類使用注解,則生成.annotation指令

#annotation

.annotation[注解屬性]<注解類名>

[注解字段=值]

.end annotation

循環語句:

Iterator<對象><對象名> = <方法返回一個對象列表>;

For(<對象><對象名>:<對象列表>){

??????????????? [處理單個對象代碼]

}

Iterator<對象><迭代器> = <方法返回一個迭代器>;

While(<迭代器>.hasNext()){

<對象><對象名> = <迭代器>.next();

??????????????? [處理單個對象的代碼]

}

?

:goto_0

??? invoke-interface{v2}, Ljava/util/Iterator;->hasNext()Z

?

??? move-result v5

?

if-nez v5, :cond_0

:cond_0

??? invoke-interface {v2},Ljava/util/Iterator;->next()Ljava/lang/Object;

?

??? move-result-object v1

goto :goto_0

try catch:

try {

??????????? String a = "sdf";

??????????? Toast.makeText(this,a,Toast.LENGTH_SHORT);

??????????? try {

??????????????? if( true ){

??????????????????? throw newNumberFormatException();

??????????????? }

??????????? } catch (NumberFormatException e) {

??????????????? Toast.makeText(this,"number format exception", Toast.LENGTH_SHORT);

??????????? }

??????? } catch (IllegalArgumentException e){

???????????Toast.makeText(this,"IllegalArgumentException",Toast.LENGTH_SHORT);

??????? }

Smali:

??? .line 19

??? :try_start_0

??? const-string v0, "sdf"

?

??? .line 20

??? .local v0, "a":Ljava/lang/String;

??? const/4 v2, 0x0

?

??? invoke-static {p0, v0, v2},Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;

??? :try_end_0

??? .catch Ljava/lang/IllegalArgumentException;{:try_start_0 .. :try_end_0} :catch_1

?

??? .line 23

???:try_start_1

??? new-instance v2,Ljava/lang/NumberFormatException;

?

??? invoke-direct {v2},Ljava/lang/NumberFormatException;-><init>()V

?

??? throw v2

??? :try_end_1

??? .catch Ljava/lang/NumberFormatException;{:try_start_1 .. :try_end_1} :catch_0

??? .catch Ljava/lang/IllegalArgumentException;{:try_start_1 .. :try_end_1} :catch_1

?

??? .line 25

??? :catch_0

??? move-exception v1

?

??? .line 26

??? .local v1,"e":Ljava/lang/NumberFormatException;

??? :try_start_2

??? const-string v2, "number format exception"

?

??? const/4 v3, 0x0

?

??? invoke-static {p0, v2, v3},Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;

??? :try_end_2

??? .catch Ljava/lang/IllegalArgumentException;{:try_start_2 .. :try_end_2} :catch_1

?

Ida6.1?? ctrl+s 選擇String 搜索字符串, 選擇code搜索api

Dex2jar 轉換apk to jar,  jd-gui 查看jar源碼。

?

總結

以上是生活随笔為你收集整理的静态分析android代码, 循环与trycatch的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。