며칠 전 안드로이드에서 특정 함수가 몇 번 실행되는지 테스트를 해야할일이 있었다.
그냥 프리다로 찍어보면 편하겠지만 왠지 오랜만에 Smali 를 수정해서 로그를 찍어보고 싶어보고 싶어서 해봤다.
로그켓을 한번이라도 찍어본 사람은 알겠지만, 대충 사용자가 지정할건 Tag랑 Text라고 볼 수 있다. 뭐 다른것도 지정 가능하겠지만...
그래서 Smali 를 사용할 때 String을 두 개를 만들어준다. 실제 코드는 아래와 같다.
const-string v2, "patrick_test1"
const-string v3, "patrick_test2"
invoke-static {v2,v3}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I
근데 혹시.. 라도 수정할 때 V2, v3을 그대로 따라하시는 분이 있을까봐 첨언하자면
Smali 에서 v2, v3 같은 값을 사용할 때는 그 위에 정해진 숫자만큼 사용이 가능하다.
뭐 대충의 함수안에다 이제 내가 원하는 구문을 집어넣는다고 보면 .locals 4 라는 문구가 보인다.
저것은 메소드 내부에서 사용할 레지스터의 개수를 나타낸다. 그니까 대충 4면 v,v1,v2,v3 이렇게 4개를 쓸 수 있다고 생각하면 된다.
근데 우리는 logcat을 만들면서 2개의 레지스터를 추가로 사용할 예정이기 때문에 .locals 기존값+2로 수정을 해줘야한다. 물론 기존에 만들어진 레지스터를 사용해도 되지만 혹시 어디서 엉킬수도 있기 때문에 그냥 새로 만들어서 쓰는게 편하다;;
무튼 저렇게 Smali를 수정해주고 다시 컴파일하고 사이닝까지 해주면 끗이다. 그리고 앱을 실행시키고 내가 수정한 부분이 실행되면
아래와 같이 정상적으로 logcat이 찍히는 것을 확인할 수 있다.
명령어는 그냥 adb logcat > logcat.txt 를 통해 파일로 떨궈서 확인을 했다.
'Technical Docs > Android' 카테고리의 다른 글
[AVD] 환경구성 : 생성 및 환경변수 설정[AVD&ADB] / MAC & Windows (0) | 2022.06.21 |
---|---|
내돈내산 전자책 PDF 로 바꿀 수 없을까? (0) | 2022.06.07 |
Manifest 구조를 알아보자 (0) | 2022.01.10 |
네임 맹글링 (Name Mangling or Name Decoration) (0) | 2021.12.30 |
Smali 코드로 Toast 생성하기 (0) | 2021.12.17 |