我想學習smali,我有一些問題,我找不到通過搜索他們。DalvikVM如何處理切換和嘗試smali代碼
1)我創建了一個簡單的測試情況,以便更好地解釋自己
const-string v1, "Start"
:try_start_0
const-string v1, "Try Block"
invoke-static {v1}, Lcom/example/test/Main;->print(Ljava/lang/String;)V
:try_end_0
.catchall {:try_start_0 .. :try_end_0} :catchall_0
的.catch聲明:沒有這兩個參數的意思是採取從標籤到標籤和抓住它(代碼兩個標籤之間)或者是否意味着從try_start_0開始執行try,直到它達到try_end_0(允許跳轉來執行不在兩個標籤內的代碼)?
嘗試的標籤始終是格式try_start_%d還是可以是任何標籤?
2)另一種情況
packed-switch v0, :pswitch_data_0
const-string v1, "Default Case"
invoke-static {v1}, Lcom/example/test/Main;->print(Ljava/lang/String;)V
:goto_0
const-string v1, "The End"
invoke-static {v1}, Lcom/example/test/Main;->print(Ljava/lang/String;)V
return-void
:pswitch_0
const-string v1, "Case 1"
invoke-static {v1}, Lcom/example/test/Main;->print(Ljava/lang/String;)V
goto :goto_0
:pswitch_data_0
.packed-switch 0x1
:pswitch_0
.end packed-switch
switch語句:它要求在switch語句所在的交換機數據和交換機中的呼叫之間?又是爲了方便而固定標籤的名稱? 3)如果標籤可能不同,baksmali會不會生成不同標籤的小代碼?
4)反編譯dex時不會總是顯示的可選行是什麼?
我知道.parameter和.line是可選的,但那些可能不在那裏的是什麼?
預先感謝您。
謝謝。這正是我想知道的。我特別喜歡你的第二個「怪異」建築:)。我知道已編譯的java代碼將無法提供該代碼,但是優化程序能夠優化代碼爲無法通過常規java代碼實現的狀態(有點像C/C++轉到允許「怪異」控制流) ? – Xonar
優化器 - 可能不是。但是,它可能更可能來自混淆器 – JesusFreke