2015-06-15 21 views
7

Tôi sẽ tìm hiểu một chút về Dalvik VM, dex và Smali.Mã Smali Android là gì

Tôi đã đọc về smali, nhưng vẫn không thể hiểu rõ vị trí của nó trong chuỗi trình biên dịch. Và mục đích của nó.
Dưới đây một số câu hỏi:

  1. Như tôi biết, Dalvik là máy ảo khác chạy bytecode, trong trường hợp của Android nó là mã byte dex.
  2. Smali là gì? Hệ điều hành Android hay Dalvik Vm có làm việc trực tiếp với nó hay chỉ là cùng một byexode dex nhưng dễ đọc hơn đối với con người?
  3. Có gì đó giống như dissasembler cho Windows (như OllyDbg) thực thi chương trình bao gồm mã máy khác nhau (D3, 5F chẳng hạn) và có lệnh lắp ráp thích hợp cho mỗi mã máy, nhưng Dalvik Vm cũng là phần mềm, đại diện của bytecode
  4. Có môi trường ART mới. Nó vẫn còn sử dụng bytecode hay nó thực hiện mã nguồn gốc trực tiếp?

Cảm ơn bạn trước.

Trả lời

17

Khi bạn tạo mã ứng dụng, tệp APK chứa tệp .dex, chứa mã byte Dalvik nhị phân. Đây là định dạng mà nền tảng thực sự hiểu được. Tuy nhiên, không dễ để đọc hoặc sửa đổi mã nhị phân, do đó, có các công cụ ngoài đó để chuyển đổi thành và từ một biểu diễn có thể đọc được của con người. Định dạng phổ biến nhất có thể đọc được của con người được gọi là Smali. Điều này về cơ bản giống như bộ tách rời mà bạn đã đề cập.

Ví dụ, nói rằng bạn có mã Java mà làm điều gì đó như

int x = 42 

Giả sử đây là biến đầu tiên, sau đó mã dex cho phương pháp rất có thể sẽ chứa các chuỗi thập lục phân

13 00 2A 00 

Nếu bạn chạy baksmali trên đó, bạn sẽ nhận được một tệp văn bản có chứa dòng

const/16 v0, 42 

Rõ ràng là có thể đọc được nhiều hơn sau đó mã nhị phân. Nhưng nền tảng không biết gì về smali, nó chỉ là một công cụ để làm cho nó dễ dàng hơn để làm việc với bytecode.

Dalvik và ART cả hai đều có tệp .dex có chứa bytecode dalvik. Nó hoàn toàn minh bạch đối với nhà phát triển ứng dụng, sự khác biệt duy nhất là điều xảy ra đằng sau hậu trường khi ứng dụng được cài đặt và chạy.

+0

Bạn có thể đề xuất điều gì đó cần đọc để hiểu sâu hơn về điều này không? Nó rất thú vị đối với tôi – brqgddez

+1

Bạn có thể xem chi tiết định dạng dex tại https://source.android.com/devices/tech/dalvik/dex-format.html – Antimony

+0

Nhưng tại sao lại sử dụng smali nếu chúng ta có các công cụ như jadx decompiler, có thể nhận mã Java dễ đọc hơn nhiều so với smali? – JustAMartin