2016-09-29 2 views
2

나는 최근 smali 코드 파일을 파고 들었고, 내가 이해할 수없는 용어는 어디에도 설명되어 있지 않다 (dalvik opcode 사이트조차도). 질문을 시작하자다음과 같은 smali 용어는 무엇을 의미합니까?

1. What is ->? 
2. What is (somerandomletter):I, F, J, S, C, B etc. (any element encoding letter)? 
    example of both in one: Lcom/google/android/gms/games/achievement/AchievementEntity;->j:I 
3. What is this god damned v1, v2, v3, or v4 I see everywhere? 
    ex. const-string/jumbo v1, "Type" 
4. What is invoke-static and invoke-interface? 
    ex. invoke-interface {p0},  Lcom/google/android/gms/games/achievement/Achievement;->n()J 
    ex. invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; 
5. What are interfaces and public or private fields? 

답변

2
  1. -> 구성원 (메소드 또는 필드 중 하나)을 나타내는 데 사용되는 구문입니다.
  2. 이들은 원시 타입입니다. 그들은 https://source.android.com/devices/tech/dalvik/dex-format.html에 문서화되어 있습니다 ("TypeDescriptor Semantics"로 검색). 참고 항목 : https://github.com/JesusFreke/smali/wiki/TypesMethodsAndFields

필드에서 참조입니다. Lcom/google/android/gms/games/achievement/AchievementEntity;은 필드를 포함하는 클래스이고 ->은 멤버를 나타내는 구문이며 j은 필드의 이름이고 :은 단지 구분 기호이며 I은 필드 유형 (int)입니다.

  1. 이들은 레지스터입니다. 당신은 (항상 직접적인 방법으로 간주됩니다) 정적 메소드를 호출하는 데 사용됩니다 https://source.android.com/devices/tech/dalvik/dalvik-bytecode.html

호출 정전기에 https://source.android.com/devices/tech/dalvik/dalvik-bytecode.htmlhttps://github.com/JesusFreke/smali/wiki/Registers

  • 이 문서화되어 더 많은 정보를 찾을 수 있습니다.

    invoke-interface는 인터페이스를 호출하는 데 사용됩니다. 즉, 인터페이스를 참조하는 method_id를 사용하여 구체적인 클래스를 알 수없는 객체에서 호출합니다.

    1. 이들은 인터페이스와 공용 및 개인 필드의 표준 Java 개념과 일치합니다.
    관련 문제