Tôi đang cố gắng học smali và tôi có một vài câu hỏi mà tôi không thể tìm thấy bằng cách googling chúng.Làm thế nào để DalvikVM xử lý chuyển đổi và thử mã smali
1) Tôi đã tạo ra một trường hợp thử nghiệm đơn giản để giải thích rõ hơn bản thân mình
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
Tuyên bố .catch: không hai đối số có nghĩa là mất từ đó nhãn nhãn đó và bắt nó (mã giữa hai nhãn) hoặc có nghĩa là bắt đầu thực hiện thử từ: try_start_0 cho đến khi nó đạt đến: try_end_0 (cho phép một bước nhảy goto để thực thi mã không nằm trong hai nhãn)?
Nhãn có luôn cố gắng ở định dạng try_start_% d hoặc chúng có thể là bất kỳ nhãn nào không?
2) Một trường hợp
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
Lệnh switch: Liệu nó đòi hỏi rằng các báo cáo chuyển đổi nằm giữa dữ liệu chuyển đổi và các cuộc gọi chuyển đổi? và cũng một lần nữa việc đặt tên của các nhãn cố định hoặc chỉ để thuận tiện?
3) Nếu các nhãn có thể khác nhau, liệu baksmali có bao giờ sản xuất mã smali với các nhãn khác nhau không?
4) Các dòng tùy chọn không phải lúc nào cũng được hiển thị khi dịch ngược dex?
Tôi biết. Tham số và dòng. Là tùy chọn, nhưng tất cả những gì có thể không có ở đó?
Cảm ơn bạn trước.
Cảm ơn bạn. Đây chính là điều tôi muốn biết. Tôi đặc biệt thích công trình "kỳ lạ" thứ hai của bạn :). Tôi biết mã java đã biên dịch sẽ không thể đưa ra điều đó, nhưng một chương trình tối ưu hóa có thể tối ưu hóa mã thành trạng thái không thể đạt được với mã java thông thường (giống như C/C++ goto cho phép "lạ" kiểm soát dòng chảy) ? – Xonar
Trình tối ưu hóa - có thể là không. Tuy nhiên, nó có thể có nhiều khả năng từ một obfuscator – JesusFreke