2018. 12. 24. 12:56

CentOS7에 MariaDB(Mysql)을 설치해 사용시 한글깨짐 현상 해결방법.

인터넷에 검색시 거의 모든 곳에서 utf8로 설정시 한글이 깨짐이 해결 된다고 기술 되어 있으나

나의 경우 해결되지 않아 내 해결 방법을 기록한다.


핵심은 /etc/my.cnf 환경 설정에서 init_connect="SET NAMES euckr"로 값을 셋팅하는게 핵심이다.


가. 사용환경

- OS버전: CentOS 7.3


- DB버전: MaraiDB(Mysql) 15.1


- MariaDB(Mysql) 환경설정[/etc/my.cnf]


- Window ODBC 캐릭터셋


위와 같이 설정후 mysql 서비스를 재시작하고, DB 재접속시 한끌깨짐 현상이 제거 되었다.


누군가에겐 도움이 되길..



'Study > database' 카테고리의 다른 글

[Mysql]초기 셋팅시 비밀번호 재설정  (0) 2013.08.04
[Sybase]계정 연결 세션보기  (0) 2012.09.15
Posted by 땡보
2018. 5. 11. 12:23

>>재미로 구현해본 내용이며, 현재 동작하지 않습니다<<

 

우리는 그 성취감에 도취되어 있을뿐 악의적인 목적은 없다!

 

0x01. 올파일포유서비스 소개

인터넷상의 유료웹하드 파일이즈(http://fileis.com) 사이트를 미러링 하여, 모바일 / PC상에서 공짜로 원하는 영화, 드라마, TV, 유틸 등의 파일을 마음껏 다운로드 할 수 있도록 도와주는 서비스

 

0x01-1. 720HD로 크게 보셔도 제대로 안보여요 하지만 나름 소리도 나와요!!

  - 자세히 보아야 보인다. 오래보아야 이해된다. 너도 그렇다. ㅡㅡ;;

 

0x02. 서비스 사용법

  0x02-1. 텔레그램 찾기에 "helloongfile" 검색

  0x02-2. start 버튼 클릭 또는 "/시작" 명령으로 인증요청

  0x02-3. 관리자 인증 승인 후 "/도움말" 명령어 사용 후 시작

 

0x03. 핵심기능

  0x03-1. 파일이즈 핵심 기능 봇 래핑

    - 사용자 인증, 관리, 파일 다운로드, 다운로드 완료 알림

  0x03-2. 전용브라우저 제작

    - 로컬 프록시 서버 구성 후 파일이즈 사이트로의 요청/응답 내용을 수정 서버내 포터블 다운로드 모듈 및 텔레그램 봇과 연동, 다운로드 할 수 있도록 기능 구현

 

0x04. 장점

  0x04-1. 경제성!! 사용자는 공짜!! 운영자만 유료라는 백년에 한번 나올까말까한 사상 초유의 마진구조 운영자의 다퍼주고 깔끔하게 떠나겠다!!라는 마인드가 십분 반영된 서비스 사용자는 운영자가 결제한 사이트를 미러링 받으므로 공짜!!

  0x04-2. 접근성!! 모바일로도 언제 어디서나 검색 / 다운로드 / 시청 가능(단, 데이터 무제한 요금제 또는 WIFI 사용시만)

  0x04-3. 보안성!! 웹하드 / 토렌트 시드공유 사이트등에서 유포되는 악성코드 또는 그리드웨어 설치 위험 감소

    - 실제 파일이즈 다운로드 전용프로그램 설치시 사용자 몰래 시스템 백그라운드에 숭악한 그리드웨어 설치

 

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑사용자는 요기까지만↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

 

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓개발과정 및 소스가 필요하신 분들은 요리로↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

 

0x05. 잡담

  0x05-1. 올파일포유 동작구조 삼줄 요약

- 텔레그램 메신져 동작 

  요청: 텔레그램 메신져 ===> 올파일포유 메신져 데몬 ===> 진짜파일이즈 웹하드

  응답: 진짜파일이즈웹하드 ===> 올파일포유 메신져 데몬 ===> 텔레그램 메신져

 

- 전용브라우저

  요청: 전용브라우저 ===> 올파일포유 웹서버 데몬 ===>진짜파일이즈 웹하드

  응답: 진짜파일이즈 웹하드 ===> 올파일포유 웹서버 데몬 ===> 전용브라우저

 

  0x05-2. 분석과정

1. 크롬 개발자 도구[F12]를 사용하여 고속다운로드버튼 Onclick() 이벤트 확인

그림1

 

2. do_down_confirm ==> down_confirm_layer.php 로 리다이렉팅

그림2

 

3. Fiddler[https://www.telerik.com/fiddler]로 http 통신 디버깅

  - 서버단의 down_confirm_layer.php에서 파라메터인 파일아이디, 사용자아이디 결제방법을 이용하여 실결제가 이루어지고, 이후 익스플로러인지 기타 브라우저인지 체크하는 로직들이 포함된 do_down()으로 분기

그림3

 

4. do_down javascript function()에서 check_and_downoad() 호출[호출시 down_init.php 파라메터 포함]

그림4

 

5. 서버단의 down_init.php에서 down_confirm_layer.php 결제후 생성된 구매아이디를 사용자 정보와 함께 응답값으로 생성해 실제 다운로드런처를 실행하는 nfile_download()로 분기

그림5

 

6. 이후 SLB() 함수등을 거쳐 네비게이팅중인 브라우저가 익스플로러인지, 기타 브라우저인지 판단 후 기타브라우저 일 경우 down_multbrowser.php로 분기하여 기타 브라우저에서 웹하드 다운로드 런처를 실행하기 위한 꼼수인 로컬 웹서버를 호출할 페이지를 제작 후 강제 전송함.

이때 생성되는 페이지는 아래와 같으며, 이 페이지는 보이는 대로 127.0.0.1(로컬호스트)의 9696포트로 전송되어짐.

그림6

이 요청을 처리하는 웹서버는 FileisLocal.exe이며, 파일이즈 웹페이지상의 다운로드 모듈 설치시 설치되어지는 실행파일 중 하나임. 해당 실행파일은 FileisService.exe라는 실행파일로 윈도우 서비스 페이지에 등록되어지며, OS기동시 해당 서비스에 의해 런칭되어져 항시 상주하게 됌

FileIsLocal.exe가 해주는 역할은 FileIsWebCtrl.dll이 하는 역할과 동일하며, 업로드 런처, 다운로드 런처 등이 프로세스상에 존재하는지 확인 후 없다면 해당 런처들을 기동 후 핸들을 획득하여 동작에 맞는 메세지를 전송하여 사용자의 입력을 파일이즈 런처에 인터페이스 하는 역할을 수행한다. FileIsLocal.exe는 익스플로러 이외의 브라우저에서 위 역할들을 수행하며, FileIsWebCtrl.dll은 익스플로러 브라우저내에서 위 역할들을 수행한다.

 

FileIsWebCtrl.dll은 익스플로러로 해당 웹사이트 서핑시 아래와 같은 자바 스크립트에 의해 구동되며 해당 라이브러리의 동작은 FileIsLocal과 동일하다. 해당 dll은 일반적인 ActiveX와 동일하게 레지스트리상에서 클래스 ID로 검색이 가능하며 아래와 같은 경로에 존재하는 것을 알 수 있다.

그림7

 

그림8

 

그림9

 

그림10

 

 

그럼 다운로드 런처가 기동되는 방법을 알았으니 해당 런처를 분석하여 이후 어떤 과정으로 다운로드가 이루어 지는지 확인 해보자.

 

먼저 그림7~10에 걸쳐 브라우저별로 실제 다운로드를 실행할 모듈 2개중 어느 모듈을 분석할지 결정을 해야 하는데 결론적으로 보면 어느 모듈을 보든 마찬가지지만 좀더 간편하게 진입점을 찾을 수 있는(사실 너무 간단한 분석이라 동일하지만) ActiveX로 결정을 하고 진행을 하였다. 위의 그림 10에서 찾은 ProgID를 바탕으로 python의 win32com 모듈을 사용하여 간단하게 해당 ActiveX모듈을 메모리에 올린 후 그림7과 동일한 WebCtrl 컨르롤로 선언하여 동일한 파라메터사용 DownLoad() 모듈을 호출하면서 해당 python 프로세스에 x64Dbg를 attach한 후 dll 엔트리포인트 진입시부터 디버깅을 하면 되겠다 추정하며 작업을 시작하였다.

 

python으로 com객체를 연결시키는 작업은 모듈선언을 제외하고는 1줄이면 된다. 쉽다 편하다 눈물이 난다.

import win32com

WEBCTRL = win32com.client.Dispatch("WebControl.WebBBS.1")

이게 다다. ㅡㅡ;; 그럼 호출하는 방법은??

WEBCTRL.DownLoad(user_id, user_pw, 0, file_id, purchase_id, ftp_type, 1)

이게 다다. ㅡㅡ;; 대다나다... 조타 귀도행님에게 감사드린다.

 

각설하고 위 첫번째 코드를 x64dbg를 부착시켜놓은 파이썬 인터프리터에 입력 후 엔터키를 입력하면

해당 dll이 로드되는 것을 볼 수 있으며, dll의 참조 라이브러리에 브레이크 포인트를 걸거나 또는 글로벌 옵션에서

모든 dll 엔트리포인트에서 브레이크 포인트를 발생 시킬 수 있으며 개인취향에 따라 작업하면 된다.

 

위의 작업을 진행후 2번째 줄을 입력하여 트레이싱 하다보면, 금새 아래와 같은 디스어셈블링 코드를 볼 수 있게된다.

그림 11.

 

그림11과 같이 webctrl에서는 Fileis_class_down 이라는 클래스명으로 FindWindowA() Win32Api를 호출 프로세스 리스트상에 FileisDown.exe가 실행중인지를 체크 후 실행중이 아니면 다운로드모듈을 실행하고 실행된 윈도우의 핸들을 반환받고, 이미 실행중이면, 해당 윈도우 핸들에 다운로드 파일에 대한 파일아이디와 구매아이디를 0#<파일아이디#<구매번호#<R 과 같은 문자열로 구성하여 SendMessageA로 전송하고 FileisDown.exe 프로세스에서는 런처에서 보내져온 SendMessage를 디스패치하여 파싱 후 FileisCMC.dll의 다운로드파일정보 추출 및 구매이력 확인등의 로직을 거쳐 NAT.dll 모듈로 실제 다운로드 서버에 접속 후 다운로드를 시도하게 된다. 아래에 앞의 과정들이 진행되는 과정의 스냅샷을 첨부한다.

그림12. FileIsDown.exe가 실행중이지 않을경우 ShellExecuteA() API로 실행하는 부분

그림12에서 FileIsDown.exe가 실행시 실행 파라메터 3개를 가져가며, 아이디, 해쉬패스워드, 알수없는값1 로 실행 됨을 확인하였다. 이를 command prompt상에 입력하면 정상적으로 fileisdown.exe가 실행되는 모습을 볼 수 있다.

 

그림13. 실행되어진 fileisdown.exe의 클래스명이 Fileis_class_down 임을 spy++로 확인

 

그림14. fileiswebctrl.dll에서 fileisdown.exe윈도우로 다운로드할 파일번호와 구매번호를 메세지로 전달

 

그림15. 그림14에서 메세지 전달과 동시에 백그라운드의 다운로드모듈에 해당 파일이 추가되어지는 모습

 

그림 15의 SendMessageA를 spy++로 메세지로그를 캡쳐 후 동일하게 에뮬레이팅 후 아래코드와 같이 포팅하여 동작시켜본 결과 동일한 결과를 얻을 수 있었으나 아래 코드를 사용하지는 않는다. 어차피 webctrl컨드롤에서 전부 알아서 해주니까..

def send_msg_to_fdl(file_id, order_id, ftp):

    logger.debug(get_trace_this_point(9))

    """

    0#<8641664#<2985849#<R

    """

    fileis_hwnd = win32gui.FindWindow("Fileis_class_down", None)

 

    if fileis_hwnd <= 0:

        logger.debug("Not Found Fileis Downloader!!")

        return -1

 

    if len(str(file_id).strip()) <= 0 or len(str(order_id).strip()) <= 0:

        logger.debug("File id and order id should be inputted!!")

        return -1

 

    class CDS(Structure):

        _fields_ = [

            ("dwData", c_void_p),

            ("cbData", c_ulong),

            ("lpData", c_char_p)

            ]

 

    msg = u"0#" + str(file_id) + u"#<" + str(order_id) + u"#<" + str(ftp)

    print(msg)

    print(type(msg))

    msg = bytes(msg, "ms949")

    print(msg)

    print(type(msg))

 

    msg_buf = create_string_buffer(msg)

    print(msg_buf)

    msg_adrs = CDS(0, len(msg_buf), msg_buf.raw)

    print(msg_adrs)

    win32api.SendMessage(fileis_hwnd, win32con.WM_COPYDATA, 0, addressof(msg_adrs))

 

    return 0

 

위의 내용으로 다운로드 모듈의 분석은 종료하며, 추후 시간이되면 다운로드모듈 분석중 발견한 파일이즈 웹하드의 그리드웨어(컴퓨터 리소스 도둑!!)에 대한 부분도 추가토록 하겠다.. 하지만 귀찮아서 아마도... 안하지 않을까... 라는 뭐 그런...... 갱장히 귀찮고 무슨 부귀영화를 누리려고 이러나 싶기도 하고... 머 그냥 알았고 제거했으면 그만인것을.... 암튼 요 숭악무도한 놈이 자행하는 일은 아래와 같다.

그림16. NATservice라는 그리드웨어를 파일이즈 다운로드런처 설치시 몰래 설치해 논 모습

 

저렇게 NATService라는 놈으로 윈도 서비스에도 등록해놓고 방화벽에도 예외로 모든 포트를 개방해놓으며, 은제 으디서던 접근 할 수 있도록 항시 포트를 열고 대기를 하시는 패기넘치는 녀석이시다.. 요놈이 하는 행위와 삭제, 차단 방법은 난제 시간이 나면 공유토록 하겠다.

 

이제 전용브라우저의 간단한 구조를 설명하고 종료해야겠다 너무 길고 힘들고 구찮다... ㅋㅋㅋ 나머진 아래 첨부한 소스 까보시고 혹시 궁금하거나 잘못되어 있거나 이건 뭐 엉망이구나 하는 부분들은 빅태클 주시면 대환영 하겠습니다요.. 뉘예뉘예.. ㅡㅡ;;

 

전용브라우저는 간단하다.. 

1. 로컬 프록시 웹서버를 구성(FiddlerCord.dll) 후 

2. fileis.com 호스트로 오고 가는 모든 요청/응답을 중간에서 가로채서

3. 필요한 스크립트, html소스를 나의 입맛에 맞는 양념을 가미하고, 필요없는 부분을 제거하여 샤샥 원래의 장소로 전송해준다.

요게 끝!! ㅡㅡ;;

 

아아.... 

 

0x06. 소스

  미구현 기능이 있어 풀소스는 6월 둘째주 공개예정 : 동시(1분안쪽 1분이후는 상관없음)에 여러사람이 같은 파일(동일파일ID)을 다운로드 받을 시 선착순 1번을 빼고 나머지사람들의 요청은 영원히 묵살되는 치명적 오류 수정예정 ㅜㅜ

 

현재기준 소스: https://gist.github.com/helloong/e668eb5d1bdb823ef88958a65fba19da

 

 

'Study > python' 카테고리의 다른 글

[연습]모두의 경영 헬퍼  (0) 2015.09.14
[펌]Python code coverage for Lib/ctypes/wintypes.py  (0) 2014.10.12
shutil copyfileobj ()  (0) 2014.09.03
[연습]AutoPOKO ~~  (0) 2013.11.11
[펌]python thread 사용예  (0) 2013.10.16
Posted by 땡보
2017. 6. 29. 09:16

윈도우 NTP 동기화 하는 방법

아래 예제는 kr.pool.ntp.org 서버를 대상으로 NTP 동기화 하는 명령어 셋이다. 개인적으로 만들어 쓰고 있는 내용이니 그냥 참고만 하기 바란다.

reg add "HKLM\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient" /v Enabled /t REG_DWORD /d 1 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient" /v SpecialPollInterval /t REG_DWORD /d 3600 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config" /v MaxPosPhaseCorrection /t REG_DWORD /d 0xFFFFFFFF /f
reg add "HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config" /v MaxNegPhaseCorrection /t REG_DWORD /d 0xFFFFFFFF /f
w32tm /config /syncfromflags:manual /manualpeerlist:"kr.pool.ntp.org"
sc config w32time start= auto
sc triggerinfo w32time start/networkon stop/networkoff
net stop w32time
net start w32time
w32tm /resync /nowait


각 커맨드의 의미를 대략 설명하겠다.

reg add "HKLM\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient" /v Enabled /t REG_DWORD /d 1 /f
→ NTP Client를 활성화 하겠다는 뜻. 기본으로 활성화 되어 있으나 확실히 해주기 위함.

reg add "HKLM\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient" /v SpecialPollInterval /t REG_DWORD /d 3600 /f
→ 3600초(1시간) 주기로 동기화 하겠다는 뜻

reg add "HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config" /v MaxPosPhaseCorrection /t REG_DWORD /d 0xFFFFFFFF /f
reg add "HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config" /v MaxNegPhaseCorrection /t REG_DWORD /d 0xFFFFFFFF /f
→ 이 항목의 기본 값은 54000초(15시간)인데, 현재 시간과 NTP 서버의 시간이 15시간 이상 차이가 나면 동기화 하지 않는다. 이 값을 0xFFFFFFFF로 변경하면 시간 차이에 상관없이 무조건 동기화 하겠다는 뜻이다. 대충 1년 정도 시간을 틀리게 설정해놓고 테스트 해봤는데 동기화가 잘 되었다.

w32tm /config /syncfromflags:manual /manualpeerlist:"kr.pool.ntp.org"
→ NTP 서버를 kr.pool.ntp.org로 지정함

sc config w32time start= auto
→ Windows Time 서비스가 자동으로 시작되도록 설정

sc triggerinfo w32time start/networkon stop/networkoff
→ Windows Time 서비스는 기본적으로 Domain에 가입된 상태에서만 자동으로 시작되게 트리거 설정되어 있다. 따라서 이 트리거를 네트워크 시작/중지로 변경해 주는 것이다. 이렇게 하지 않으면 WORKGROUP 환경에서는 sc config w32time start= auto 해두어도 실제로는 리부팅 후 자동으로 서비스가 올라오지 않는다. 따라서 반드시 필요한 설정이라 할 수 있다.

net stop w32time
net start w32time
→ Windows Time 서비스 재시작

w32tm /resync /nowait
→ NTP 동기화 즉시 실행

이렇게 설정하고 현재의 NTP 동기화 상태를 확인하고 싶다면 아래와 같이 입력하면 된다.

w32tm /query /status

C:\Windows\system32>w32tm /query /status
윤초 조정: 0(경고 없음)
계층: 3(보조 참조 - (S)NTP로 동기화됨)
정밀도: -6(틱당 15.625ms)
루트 지연: 0.1697235s
루트 분산: 7.7969707s
참조 ID: 0xD3278804(원본 IP:  211.39.136.4)
마지막으로 동기화한 시간: 2014-02-12 오전 1:15:15
원본: kr.pool.ntp.org
폴링 간격: 10(1024s)



출처: http://www.snoopybox.co.kr/1728 [snoopybox]

Posted by 땡보
2015. 9. 14. 15:46

python opencv 및 image processing 학습겸 놀이겸 겸사겸사 만들어 본.. 모경.. 헬퍼..

갈길이 멀구나....


Test device : Samsung GalaxyPlayer5.8 (장비가 많이 옛날거라 버벅거림이 심하네요..)


혹여나 해서 적습니다.

순전히 개인적인 용도이며, 테스트 이외의 목적으로 사용하지 않습니다. 또한 배포도 없으며, 

다른분들의 민감한 정보들은 최대한 모자이크 처리 하였습니다. 

그래도.. 그래도... 문제가 된다면... 자삭 하겠습니다.

'Study > python' 카테고리의 다른 글

[연습]올파일포유?? ㅋㅋ  (0) 2018.05.11
[펌]Python code coverage for Lib/ctypes/wintypes.py  (0) 2014.10.12
shutil copyfileobj ()  (0) 2014.09.03
[연습]AutoPOKO ~~  (0) 2013.11.11
[펌]python thread 사용예  (0) 2013.10.16
Posted by 땡보
2015. 3. 15. 07:38

Link : http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html


Dalvik opcodes

Author: Gabor Paller


Vx values in the table denote a Dalvik register. Depending on the instruction, 16, 256 or 64k registers can be accessed. Operations on long and double values use two registers, e.g. a double value addressed in the V0 register occupies the V0 and V1 registers.

Boolean values are stored as 1 for true and 0 for false. Operations on booleans are translated into integer operations.

All the examples are in hig-endian format, e.g. 0F00 0A00 is coded as
 0F, 00, 0A, 00 sequence.

Note there are no explanation/example at some instructions. This means that I have not seen that instruction "in the wild" and its presence/name is only known from Android opcode constant list.

Opcode (hex)
Opcode name
Explanation
Example
00
nop
No operation
0000 - nop 
01
move vx,vy
Moves the content of vy into vx. Both registers must be in the first 256 register range.
0110 - move v0, v1
Moves v1 into v0.
02
move/from16 vx,vy
Moves the content of vy into vx. vy may be in the 64k register range while vx is one of the first 256 registers.
0200 1900 - move/from16 v0, v25
Moves v25 into v0.
03
move/16


04
move-wide 


05
move-wide/from16 vx,vy
Moves a long/double value from vy to vx. vy may be in the 64k register range while wx is one of the first 256 registers.
0516 0000 - move-wide/from16 v22, v0
Moves v0 into v22.
06
move-wide/16


07
move-object vx,vy
Moves the object reference from vy to vx.
0781 - move-object v1, v8
Moves the object reference in v8 to v1.
08
move-object/from16 vx,vy
Moves the object reference from vy to vx, vy can address 64k registers and vx can address 256 registers.
0801 1500 - move-object/from16 v1, v21
Move the object reference in v21 to v1.
09
move-object/16


0A
move-result vx
Move the result value of the previous method invocation into vx.
0A00 - move-result v0
Move the return value of a previous method invocation into v0.
0B
move-result-wide vx
Move the long/double result value of the previous method invocation into vx,vx+1.
0B02 - move-result-wide v2
Move the long/double result value of the previous method invocation into v2,v3.
0C
move-result-object vx
Move the result object reference of the previous method invocation into vx.
0C00 - move-result-object v0
0D
move-exception vx
Move the exception object reference thrown during a method invocation into vx. 
0D19 - move-exception v25
0E
return-void
Return without a return value
0E00 - return-void
0F
return vx
Return with vx return value
0F00 - return v0
Returns with return value in v0.

10
return-wide vx
Return with double/long result in vx,vx+1.
1000 - return-wide v0
Returns with a double/long value in v0,v1.
11
return-object vx
Return with vx object reference value.
1100 - return-object v0
Returns with object reference value in v0
12
const/4 vx,lit4
Puts the 4 bit constant into vx
1221 - const/4 v1, #int2
Moves literal 2 into v1. The destination register is in the lower 4 bit in the second byte, the literal 2 is in the higher 4 bit.
13
const/16 vx,lit16
Puts the 16 bit constant into vx
1300 0A00 - const/16 v0, #int 10
Puts the literal constant of 10 into v0.
14
const vx, lit32
Puts the integer constant into vx
1400 4E61 BC00 - const v0, #12345678 // #00BC614E
Moves literal 12345678 into v0.
15
const/high16 v0, lit16
Puts the 16 bit constant into the topmost bits of the register. Used to initialize float values.
1500 2041 - const/high16 v0, #float 10.0 // #41200000
Moves the floating literal of 10.0 into v0. The 16 bit literal in the instruction carries the top 16 bits of the floating point number.
16
const-wide/16 vx, lit16
Puts the integer constant into vx and vx+1 registers, expanding the integer constant into a long constant..
1600 0A00 - const-wide/16 v0, #long 10
Moves literal 10 into v0 and v1 registers.
17
const-wide/32 vx, lit32
Puts the 32 bit constant into vx and vx+1 registers, expanding the integer constant into a long constant.
1702 4e61 bc00 - const-wide/32 v2, #long 12345678 // #00bc614e
Puts #12345678 into v2 and v3 registers.
18
const-wide vx, lit64
Puts the 64 bit constant into vx and vx+1 registers.
1802 874b 6b5d 54dc 2b00- const-wide v2, #long 12345678901234567 // #002bdc545d6b4b87
Puts #12345678901234567 into v2 and v3 registers.
19
const-wide/high16 vx,lit16
Puts the 16 bit constant into the highest 16 bit of vx and vx+1 registers. Used to initialize double values.
1900 2440 - const-wide/high16 v0, #double 10.0 // #402400000
Puts the double constant of 10.0 into v0 register.
1A
const-string vx,string_id
Puts reference to a string constant identified by string_id into vx.
1A08 0000 - const-string v8, "" // string@0000
Puts reference to string@0000 (entry #0 in the string table) into v8.
1B
const-string-jumbo


1C
const-class vx,type_id
Moves the class object of a class identified by type_id (e.g. Object.class) into vx.
1C00 0100 - const-class v0, Test3 // type@0001
Moves reference to Test3.class (entry#1 in the type id table) into 
1D
monitor-enter vx
Obtains the monitor of the object referenced by vx.
1D03 - monitor-enter v3
Obtains the monitor of the object referenced by v3.
1E
monitor-exit
Releases the monitor of the object referenced by vx.
1E03 - monitor-exit v3
Releases the monitor of the object referenced by v3.
1F
check-cast vx, type_id
Checks whether the object reference in vx can be cast to an instance of a class referenced by type_id. Throws ClassCastException if the cast is not possible, continues execution otherwise.
1F04 0100 - check-cast v4, Test3 // type@0001
Checks whether the object reference in v4 can be cast to type@0001 (entry #1 in the type id table)
20
instance-of vx,vy,type_id
Checks whether vy is instance of a class identified by type_id. Sets vx non-zero if it is, 0 otherwise.
2040 0100 - instance-of v0, v4, Test3 // type@0001
Checks whether the object reference in v4 is an instance of type@0001 (entry #1 in the type id table). Sets v0 to non-zero if v4 is instance of Test3, 0 otherwise.
21
array-length vx,vy
Calculates the number of elements of the array referenced by vy and puts the length value into vx.
2111 - array-length v1, v1
Calculates the number of elements of the array referenced by v1 and puts the result into v1.
22
new-instance vx,type
Instantiates an object type and puts the reference of the newly created instance into vx.
2200 1500 - new-instance v0, java.io.FileInputStream // type@0015
Instantiates type@0015 (entry #15H in the type table) and puts its reference into v0.
23
new-array vx,vy,type_id
Generates a new array of type_id type and vy element size and puts the reference to the array into vx.
2312 2500 - new-array v2, v1, char[] // type@0025
Generates a new array of type@0025 type and v1 size and puts the reference to the new array into v2.
24
filled-new-array {parameters},type_id
Generates a new array of type_id and fills it with the parameters5. Reference to the newly generated array can be obtained by a move-result-object instruction, immediately following the filled-new-array instruction.
2420 530D 0000 - filled-new-array {v0,v0},[I // type@0D53
Generates a new array of type@0D53. The array's size will be 2 and both elements will be filled with the contents of v0 register.
25
filled-new-array-range {vx..vy},type_id
Generates a new array of type_id and fills it with a range of parameters. Reference to the newly generated array can be obtained by a move-result-object instruction, immediately following the filled-new-array instruction.2503 0600 1300 - filled-new-array/range {v19..v21}, [B // type@0006
Generates a new array of type@0D53. The array's size will be 3 and the elements will be filled using the v19,v20 and v21 registers4.
26
fill-array-data vx,array_data_offset
Fills the array referenced by vx with the static data. The location of the static data is the sum of  the position of the current instruction and the offset
2606 2500 0000 - fill-array-data v6, 00e6 // +0025
Fills the array referenced by v0 with the static data at current instruction+25H words location. The offset is expressed as a 32-bit number. The static data is stored in the following format:
0003 // Table type: static array data
0400 // Byte per array element (in this case, 4 byte integers)
0300 0000 // Number of elements in the table
0100 0000  // Element #0: integer 1
0200 0000 // Element #1: integer 2
0300 0000 // Element #2: integer3
27
throw vx
Throws an exception object. The reference of the exception object is in vx.
2700 - throw v0
Throws an exception. The exception object reference is in v0.
28
goto target
Unconditional jump by short offset2
28F0 - goto 0005 // -0010
Jumps to current position-16 words (hex 10). 0005 is the label of the target instruction.
29
goto/16 target
Unconditional jump by 16 bit offset2.
2900 0FFE - goto/16 002f // -01f1
Jumps to the current position-1F1H words. 002F is the label of the target instruction.
2A
goto/32 target


2B
packed-switch vx,table
Implements a switch statement where the case constants are close to each other. The instruction uses an index table. vx indexes into this table to find the offset of the instruction for a particular case. If vx falls out of the index table, the execution continues on the next instruction (default case).
2B02 0C00 0000 - packed-switch v2, 000c // +000c
Execute a packed switch according to the switch argument in v2. The position of the index table is at current instruction+0CH words. The table looks like the following:
0001 // Table type: packed switch table
0300 // number of elements
0000 0000 // element base
0500 0000  0: 00000005 // case 0: +00000005
0700 0000  1: 00000007 // case 1: +00000007
0900 0000  2: 00000009 // case 2: +00000009
2C
sparse-switch vx,table
Implements a switch statement with sparse case table. The instruction uses a lookup table with case constants and offsets for each case constant. If there is no match in the table, execution continues on the next instruction (default case).
2C02 0c00 0000 - sparse-switch v2, 000c // +000c
Execute a sparse switch according to the switch argument in v2. The position of the lookup table is at current instruction+0CH words. The table looks like the following.
0002 // Table type: sparse switch table
0300 // number of elements
9cff ffff // first case: -100
fa00 0000 // second case constant: 250
e803 0000 // third case constant: 1000
0500 0000 // offset for the first case constant: +5
0700 0000 // offset for the second case constant: +7
0900 0000 // offset for the third case constant: +9
2D
cmpl-float
Compares the float values in vy and vz and sets the integer value in vx accordingly32D00 0607 - cmpl-float v0, v6, v7
Compares the float values in v6 and v7 then sets v0 accordingly. NaN bias is less-than, the instruction will return -1 if any of the parameters is NaN.
2E
cmpg-float vx, vy, vz
Compares the float values in vy and vz and sets the integer value in vx accordingly3.2E00 0607 - cmpg-float v0, v6, v7
Compares the float values in v6 and v7 then sets v0 accordingly. NaN bias is greater-than, the instruction will return 1 if any of the parameters is NaN.
2F
cmpl-double vx,vy,vz
Compares the double values in vy and vz2 and sets the integer value in vx accordingly3.2F19 0608 - cmpl-double v25, v6, v8
Compares the double values in v6,v7 and v8,v9 and sets v25 accordingly. NaN bias is less-than, the instruction will return -1 if any of the parameters is NaN.
30
cmpg-double vx, vy, vz
Compares the double values in vy and vz2 and sets the integer value in vx accordingly3.3000 080A - cmpg-double v0, v8, v10
Compares the double values in v8,v9 and v10,v11 then sets v0 accordingly. NaN bias is greater-than, the instruction will return 1 if any of the parameters is NaN.
31
cmp-long vx, vy, vz
Compares the long values in vy and vz and sets the integer value in vx accordingly3.
3100 0204 - cmp-long v0, v2, v4
Compares the long values in v2 and v4 then sets v0 accordingly.
32
if-eq vx,vy,target
Jumps to target if vx==vy2. vx and vy are integer values.
32b3 6600 - if-eq v3, v11, 0080 // +0066
Jumps to the current position+66H words if v3==v11. 0080 is the label of the target instruction.
33
if-ne vx,vy,target
Jumps to target if vx!=vy2. vx and vy are integer values.33A3 1000 - if-ne v3, v10, 002c // +0010
Jumps to the current position+10H words if v3!=v10. 002c is the label of the target instruction.
34
if-lt vx,vy,target
Jumps to target is vx<vy2. vx and vy are integer values.
3432 CBFF - if-lt v2, v3, 0023 // -0035
Jumps to the current position-35H words if v2<v3. 0023 is the label of the target instruction.
35
if-ge vx, vy,target
Jumps to target if vx>=vy2. vx and vy are integer values.
3510 1B00 - if-ge v0, v1, 002b // +001b
Jumps to the current position+1BH words if v0>=v1. 002b is the label of the target instruction.
36
if-gt vx,vy,target
Jumps to target if vx>vy2. vx and vy are integer values.3610 1B00 - if-ge v0, v1, 002b // +001b
Jumps to the current position+1BH words if v0>v1. 002b is the label of the target instruction.
37
if-le vx,vy,target
Jumps to target if vx<=vy2. vx and vy are integer values.3756 0B00 - if-le v6, v5, 0144 // +000b
Jumps to the current position+0BH words if v6<=v5. 0144 is the label of the target instruction.
38
if-eqz vx,target
Jumps to target if vx==02. vx is an integer value.
3802 1900 - if-eqz v2, 0038 // +0019
Jumps to the current position+19H words if v2==0. 0038 is the label of the target instruction.
39
if-nez vx,target
Checks vx and jumps if vx is nonzero2
3902 1200 - if-nez v2, 0014 // +0012
Jumps to current position+18 words (hex 12) if v2 is nonzero. 0014 is the label of the target instruction.
3A
if-ltz vx,target
Checks vx and jumps if vx<02.3A00 1600 - if-ltz v0, 002d // +0016
Jumps to the current position+16H words if v0<0. 002d is the label of the target instruction.
3B
if-gez vx,target
Checks vx and jumps if vx>=02.
3B00 1600 - if-gez v0, 002d // +0016
Jumps to the current position+16H words if v0 >=0. 002d is the label of the target instruction.
3C
if-gtz vx,target
Checks vx and jumps if vx>02.3C00 1D00 - if-gtz v0, 004a // +001d
Jumps to the current position+1DH words if v0>0. 004A is the label of the target instruction.
3D
if-lez vx,target
Checks vx and jumps if vx<=02.3D00 1D00 - if-lez v0, 004a // +001d
Jumps to the current position+1DH words if v0<=0. 004A is the label of the target instruction.
3E
unused_3E


3F
unused_3F


40
unused_40


41
unused_41


42
unused_42


43
unused_43


44
aget vx,vy,vz
Gets an integer value of an object reference array into vx. The array is referenced by vy and is indexed by vz.4407 0306 - aget v7, v3, v6
Gets an integer array element. The array is referenced by v3 and the element is indexed by v6. The element will be put into v7.
45
aget-wide vx,vy,vz
Gets a long/double value of long/double array into vx,vx+1. The array is referenced by vy and is indexed by vz.4505 0104 - aget-wide v5, v1, v4
Gets a long/double array element. The array is referenced by v1 and the element is indexed by v4. The element will be put into v5,v6.
46
aget-object vx,vy,vz
Gets an object reference value of an object reference array into vx. The array is referenced by vy and is indexed by vz.
4602 0200 - aget-object v2, v2, v0
Gets an object reference array element. The array is referenced by v2 and the element is indexed by v0. The element will be put into v2.
47
aget-boolean vx,vy,vz
Gets a boolean value of a boolean array into vx. The array is referenced by vy and is indexed by vz.4700 0001 - aget-boolean v0, v0, v1 
Gets a boolean array element. The array is referenced by v0 and the element is indexed by v1. The element will be put into v0.
48
aget-byte vx,vy,vz
Gets a byte value of a byte array into vx. The array is referenced by vy and is indexed by vz.4800 0001 - aget-byte v0, v0, v1
Gets a byte array element. The array is referenced by v0 and the element is indexed by v1. The element will be put into v0.
49
aget-char vx, vy,vz
Gets a char value  of a character array into vx. The element is indexed by vz, the array object is referenced by vy4905 0003 - aget-char v5, v0, v3
Gets a character array element. The array is referenced by v0 and the element is indexed by v3. The element will be put into v5.
4A
aget-short vx,vy,vz
Gets a short value  of a short array into vx. The element is indexed by vz, the array object is referenced by vy.4A00 0001 - aget-short v0, v0, v1
Gets a short array element. The array is referenced by v0 and the element is indexed by v1. The element will be put into v0.
4B
aput vx,vy,vz
Puts the integer value in vx into an element of an integer array. The element is indexed by vz, the array object is referenced by vy.4B00 0305 - aput v0, v3, v5
Puts the integer value in v2 into an integer array referenced by v0. The target array element is indexed by v1.
4C
aput-wide vx,vy,vz
Puts the double/long value in vx,vx+1 into a double/long array. The array is referenced by vy, the element is indexed by vz.
4C05 0104 - aput-wide v5, v1, v4
Puts the double/long value in v5,v6 into a double/long array referenced by v1. The target array element is indexed by v4.
4D
aput-object vx,vy,vz
Puts the object reference value in vx into an element of an object reference array. The element is indexed by vz, the array object is referenced by vy.4D02 0100 - aput-object v2, v1, v0
Puts the object reference value in v2 into an object reference array referenced by v0. The target array element is indexed by v1.
4E
aput-boolean vx,vy,vz
Puts the boolean value in vx into an element of a boolean array. The element is indexed by vz, the array object is referenced by vy.4E01 0002 - aput-boolean v1, v0, v2
Puts the boolean value in v1 into an object reference array referenced by v0. The target array element is indexed by v2.
4F
aput-byte vx,vy,vz
Puts the byte value in vx into an element of a byte array. The element is indexed by vz, the array object is referenced by vy.4F02 0001 - aput-byte v2, v0, v1
Puts the boolean value in v2 into a byte array referenced by v0. The target array element is indexed by v1.
50
aput-char vx,vy,vz
Puts the char value in vx into an element of a character array. The element is indexed by vz, the array object is referenced by vy.5003 0001 - aput-char v3, v0, v1
Puts the character value in v3 into a character array referenced by v0. The target array element is indexed by v1.
51
aput-short vx,vy,vz
Puts the short value in vx into an element of a short array. The element is indexed by vz, the array object is referenced by vy.5102 0001 - aput-short v2, v0, v1
Puts the short value in v2 into a character array referenced by v0. The target array element is indexed by v1.
52
iget vx, vy, field_id
Reads an instance field into vx. The instance is referenced by vy.
5210 0300 - iget v0, v1, Test2.i6:I // field@0003
Reads field@0003 into v0 (entry #3 in the field id table). The instance is referenced by v1.
53
iget-wide vx,vy,field_id
Reads an instance field into vx1. The instance is referenced by vy.
5320 0400 - iget-wide v0, v2, Test2.l0:J // field@0004
Reads field@0004 into v0 and v1 registers (entry #4 in the field id table). The instance is referenced by v2.
54
iget-object vx,vy,field_id
Reads an object reference instance field into vx. The instance is referenced by vy.
iget-object v1, v2, LineReader.fis:Ljava/io/FileInputStream; // field@0002
Reads field@0002 into v1  (entry #2 in the field id table). The instance is referenced by v2.
55
iget-boolean vx,vy,field_id
Reads a boolean instance field into vx. The instance is referenced by vy.
55FC 0000 - iget-boolean v12, v15, Test2.b0:Z // field@0000
Reads the boolean field@0000 into v12 register (entry #0 in the field id table). The instance is referenced by v15.
56
iget-byte vx,vy,field_id
Reads a byte instance field into vx. The instance is referenced by vy.5632 0100 - iget-byte v2, v3, Test3.bi1:B // field@0001
Reads the char field@0001 into v2 register (entry #1 in the field id table). The instance is referenced by v3.
57
iget-char vx,vy,field_id
Reads a char instance field into vx. The instance is referenced by vy.5720 0300 - iget-char v0, v2, Test3.ci1:C // field@0003
Reads the char field@0003 into v0 register (entry #3 in the field id table). The instance is referenced by v2.
58
iget-short vx,vy,field_id
Reads a short instance field into vx. The instance is referenced by vy.5830 0800 - iget-short v0, v3, Test3.si1:S // field@0008
Reads the short field@0008 into v0 register (entry #8 in the field id table). The instance is referenced by v3.
59
iput vx,vy, field_id
Puts vx into an instance field. The instance is referenced by vy.
5920 0200 - iput v0,v2, Test2.i6:I // field@0002
Stores v0 into field@0002 (entry #2 in the field id table). The instance is referenced by v2.
5A
iput-wide vx,vy, field_id
Puts the wide value located in vx and vx+1 registers into an instance field. The instance is referenced by vy.
5A20 0000 - iput-wide v0,v2, Test2.d0:D // field@0000 
Stores the wide value in v0, v1 registers into field@0000 (entry #0 in the field id table). The instance is referenced by v2.
5B
iput-object vx,vy,field_id
Puts the object reference in vx into an instance field. The instance is referenced by vy.
5B20 0000 - iput-object v0, v2, LineReader.bis:Ljava/io/BufferedInputStream; // field@0000
Stores the object reference in v0 into field@0000 (entry #0 in the field table). The instance is referenced by v2.
5C
iput-boolean vx,vy, field_id
Puts the boolean value located in vx into an instance field. The instance is referenced by vy.
5C30 0000 - iput-boolean v0, v3, Test2.b0:Z // field@0000
Puts the boolean value in v0 into field@0000 (entry #0 in the field id table). The instance is referenced by v3.
5D
iput-byte vx,vy,field_id
Puts the byte value located in vx into an instance field. The instance is referenced by vy.5D20 0100 - iput-byte v0, v2, Test3.bi1:B // field@0001
Puts the boolean value in v0 into field@0001 (entry #1 in the field id table). The instance is referenced by v2.
5E
iput-char vx,vy,field_id
Puts the char value located in vx into an instance field. The instance is referenced by vy.5E20 0300 - iput-char v0, v2, Test3.ci1:C // field@0003
Puts the char value in v0 into field@0003 (entry #3 in the field id table). The instance is referenced by v2.
5F
iput-short vx,vy,field_id
Puts the short value located in vx into an instance field. The instance is referenced by vy.5F21 0800 - iput-short v1, v2, Test3.si1:S // field@0008
Puts the short value in v1 into field@0008 (entry #8 in the field id table). The instance is referenced by v2.
60
sget vx,field_id
Reads the integer field identified by the field_id into vx.6000 0700 - sget v0, Test3.is1:I // field@0007
Reads field@0007 (entry #7 in the field id table) into v0.
61
sget-wide vx, field_id
Reads the static field identified by the field_id into vx and vx+1 registers.
6100 0500 - sget-wide v0, Test2.l1:J // field@0005
Reads field@0005 (entry #5 in the field id table) into v0 and v1 registers.
62
sget-object vx,field_id
Reads the object reference field identified by the field_id into vx.6201 0C00 - sget-object v1, Test3.os1:Ljava/lang/Object; // field@000c
Reads field@000c (entry #CH in the field id table) into v1.
63
sget-boolean vx,field_id
Reads the boolean static field identified by the field_id into vx.6300 0C00 - sget-boolean v0, Test2.sb:Z // field@000c
Reads boolean field@000c (entry #12 in the field id table) into v0.
64
sget-byte vx,field_id
Reads the byte static field identified by the field_id into vx.6400 0200 - sget-byte v0, Test3.bs1:B // field@0002
Reads byte field@0002 (entry #2 in the field id table) into v0.
65
sget-char vx,field_id
Reads the char static field identified by the field_id into vx.6500 0700 - sget-char v0, Test3.cs1:C // field@0007
Reads byte field@0007 (entry #7 in the field id table) into v0.
66
sget-short vx,field_id
Reads the short static field identified by the field_id into vx.6600 0B00 - sget-short v0, Test3.ss1:S // field@000b
Reads short field@000b (entry #BH in the field id table) into v0.
67
sput vx, field_id
Puts vx into a static field.
6700 0100 - sput v0, Test2.i5:I // field@0001
Stores v0 into field@0001 (entry #1 in the field id table).
68
sput-wide vx, field_id
Puts vx and vx+1 into a static field.
6800 0500 - sput-wide v0, Test2.l1:J // field@0005
Puts the long value in v0 and v1 into the field@0005 static field (entry #5 in the field id table).
69
sput-object vx,field_id
Puts object reference in vx into a static field.6900 0c00 - sput-object v0, Test3.os1:Ljava/lang/Object; // field@000c
Puts the object reference value in v0 into the field@000c static field (entry #CH in the field id table).
6A
sput-boolean vx,field_id
Puts boolean value in vx into a static field.6A00 0300 - sput-boolean v0, Test3.bls1:Z // field@0003
Puts the byte value in v0 into the field@0003 static field (entry #3 in the field id table).
6B
sput-byte vx,field_id
Puts byte value in vx into a static field.6B00 0200 - sput-byte v0, Test3.bs1:B // field@0002
Puts the byte value in v0 into the field@0002 static field (entry #2 in the field id table).
6C
sput-char vx,field_id
Puts char value in vx into a static field.6C01 0700 - sput-char v1, Test3.cs1:C // field@0007
Puts the char value in v1 into the field@0007 static field (entry #7 in the field id table).
6D
sput-short vx,field_id
Puts short value in vx into a static field.6D00 0B00 - sput-short v0, Test3.ss1:S // field@000b
Puts the short value in v0 into the field@000b static field (entry #BH in the field id table).
6E
invoke-virtual { parameters }, methodtocall
Invokes a virtual method with parameters.
6E53 0600 0421 - invoke-virtual { v4, v0, v1, v2, v3}, Test2.method5:(IIII)V // method@0006
Invokes the 6th method in the method table with the following arguments: v4 is the "this" instance, v0, v1, v2, and v3 are the method parameters. The method has 5 arguments (4 MSB bits of the second byte)5.
6F
invoke-super {parameter},methodtocall
Invokes the virtual method of the immediate parent class.6F10 A601 0100 invoke-super {v1},java.io.FilterOutputStream.close:()V // method@01a6
Invokes method@01a6 with one parameter, v1.
70
invoke-direct { parameters }, methodtocall
Invokes a method with parameters without the virtual method resolution.
7010 0800 0100 - invoke-direct {v1}, java.lang.Object.<init>:()V // method@0008
Invokes the 8th method in the method table with just one parameter, v1 is the "this" instance5.
71
invoke-static {parameters}, methodtocall
Invokes a static method with parameters.
7110 3400 0400 - invoke-static {v4}, java.lang.Integer.parseInt:( Ljava/lang/String;)I // method@0034
Invokes method@34 static method. The method is called with one parameter, v45.
72
invoke-interface {parameters},methodtocall
Invokes an interface method.
7240 2102 3154 invoke-interface {v1, v3, v4, v5}, mwfw.IReceivingProtocolAdapter.receivePackage:(
ILjava/lang/String;Ljava/io/InputStream;)Z // method@0221
Invokes method@221 interface method using parameters in v1,v3,v4 and v55.
73
unused_73


74
invoke-virtual/range {vx..vy},methodtocall
Invokes virtual method with a range of registers. The instruction specifies the first register and the number of registers to be passed to the method.7403 0600 1300 - invoke-virtual {v19..v21}, Test2.method5:(IIII)V // method@0006
Invokes the 6th method in the method table with the following arguments: v19 is the "this" instance, v20 and v21 are the method parameters. 
75
invoke-super/range
Invokes  the virtual method of the immediate parent class. The instruction specifies the first register and the number of registers to be passed to the method.7501 A601 0100 invoke-super {v1},java.io.FilterOutputStream.close:()V // method@01a6
Invokes method@01a6 with one parameter, v1.
76
invoke-direct/range {vx..vy},methodtocall
Invokes direct method with a range of registers. The instruction specifies the first register and the number of registers to be passed to the method.
7603 3A00 1300 - invoke-direct/range {v19..21},java.lang.Object.<init>:()V // method@003a
Invokes method@3A with 1 parameters (second byte of the instruction=03). The parameter is stored in v19 (5th,6th bytes of the instruction).
77
invoke-static/range {vx..vy},methodtocall
Invokes static method with a range of registers. The instruction specifies the first register and the number of registers to be passed to the method.7703 3A00 1300 - invoke-static/range {v19..21},java.lang.Integer.parseInt:( Ljava/lang/String;)I // method@0034
Invokes method@3A with 1 parameters (second byte of the instruction=03). The parameter is stored in v19 (5th,6th bytes of the instruction).
78
invoke-interface-range
Invokes an interface method with a range of registers. The instruction specifies the first register and the number of registers to be passed to the method.7840 2102 0100 invoke-interface {v1..v4}, mwfw.IReceivingProtocolAdapter.receivePackage:(
ILjava/lang/String;Ljava/io/InputStream;)Z // method@0221
Invokes method@221 interface method using parameters in v1..v4.
79
unused_79


7A
unused_7A


7B
neg-int vx,vy
Calculates vx=-vy.
7B01 - neg-int v1,v0
Calculates -v0 and stores the result in v1.
7C
not-int vx,vy


7D
neg-long vx,vy
Calculates vx,vx+1=-(vy,vy+1) 
7D02 - neg-long v2,v0
Calculates -(v0,v1) and stores the result into (v2,v3)
7E
not-long vx,vy


7F
neg-float vx,vy
Calculates vx=-vy
7F01 - neg-float v1,v0
Calculates -v0 and stores the result into v1.
80
neg-double vx,vy
Calculates vx,vx+1=-(vy,vy+1)8002 - neg-double v2,v0
Calculates -(v0,v1) and stores the result into (v2,v3)
81
int-to-long vx, vy
Converts the integer in vy into a long in vx,vx+1.
8106 - int-to-long v6, v0
Converts an integer in v0 into a long in v6,v7.
82
int-to-float vx, vy
Converts the integer in vx into a float in vx.
8206 - int-to-float v6, v0
Converts the integer in v0 into a float in v6.
83
int-to-double vx, vy
Converts the integer in vy into the double in vx,vx+1.
8306 - int-to-double v6, v0
Converts the integer in v0 into a double in v6,v7
84
long-to-int vx,vy
Converts the long value in vy,vy+1 into an integer in vx.
8424 - long-to-int v4, v2
Converts the long value in v2,v3 into an integer value in v4.
85
long-to-float vx, vy
Converts the long value in vy,vy+1 into a float in vx.
8510 - long-to-float v0, v1
Convcerts the long value in v1,v2 into a float value in v0.
86
long-to-double vx, vy
Converts the long value in vy,vy+1 into a double value in vx,vx+1.
8610 - long-to-double v0, v1
Converts the long value in v1,v2 into a double value in v0,v1.
87
float-to-int vx, vy
Converts the float value in vy into an integer value in vx.
8730 - float-to-int v0, v3
Converts the float value in v3 into an integer value in v0.
88
float-to-long vx,vy
Converts the float value in vy into a long value in vx.
8830 - float-to-long v0, v3
Converts the float value in v3 into a long value in v0,v1.
89
float-to-double vx, vy
Converts the float value in vy into a double value in vx,vx+1.
8930 - float-to-double v0, v3
Converts the float value in v3 into a double value in v0,v1.
8A
double-to-int vx, vy
Converts the double value in vy,vy+1 into an integer value in vx.
8A40  - double-to-int v0, v4
Converts the double value in v4,v5 into an integer value in v0.
8B
double-to-long vx, vy
Converts the double value in vy,vy+1 into a long value in vx,vx+1.
8B40 - double-to-long v0, v4
Converts the double value in v4,v5 into a long value in v0,v1.
8C
double-to-float vx, vy
Converts the double value in vy,vy+1 into a float value in vx.
8C40 - double-to-float v0, v4
Converts the double value in v4,v5 into a float value in v0,v1.
8D
int-to-byte vx,vy
Converts the int value in vy to a byte value and stores it in vx.
8D00 - int-to-byte v0, v0
Converts the integer in v0 into a byte and puts the byte value into v0.
8E
int-to-char vx,vy
Converts the int value in vy to a char value and stores it in vx.
8E33  - int-to-char v3, v3
Converts the integer in v3 into a char and puts the char value into v3.
8F
int-to-short vx,vy
Converts the int value in vy to a short value and stores it in vx.8F00 - int-to-short v0, v0
Converts the integer in v0 into a short and puts the short value into v3.
90
add-int vx,vy,vzCalculates vy+vz and puts the result into vx.9000 0203 - add-int v0, v2, v3
Adds v3 to v2 and puts the result into v04.
91
sub-int vx,vy,vz
Calculates vy-vz and puts the result into vx.
9100 0203 - sub-int v0, v2, v3
Subtracts v3 from v2 and puts the result into v0.
92
mul-int vx, vy, vz
Multiplies vz with wy and puts the result int vx.
9200 0203 - mul-int v0,v2,v3
Multiplies v2 with w3 and puts the result into v0
93
div-int vx,vy,vz
Divides vy with vz and puts the result into vx.
9303 0001 - div-int v3, v0, v1
Divides v0 with v1 and puts the result into v3.
94
rem-int vx,vy,vz
Calculates vy % vz and puts the result into vx.9400 0203 - rem-int v0, v2, v3
Calculates v3 % v2 and puts the result into v0.
95
and-int vx, vy, vz
Calculates vy AND vz and puts the result into vx.
9503 0001 - and-int v3, v0, v1
Calculates v0 AND v1 and puts the result into v3.
96
or-int vx, vy, vz
Calculates vy OR vz and puts the result into vx.
9603 0001 - or-int v3, v0, v1
Calculates v0 OR v1 and puts the result into v3.
97
xor-int vx, vy, vz
Calculates vy XOR vz and puts the result into vx.9703 0001 - xor-int v3, v0, v1
Calculates v0 XOR v1 and puts the result into v3.
98
shl-int vx, vy, vz
Shift vy left by the positions specified by vz and store the result into vx.9802 0001 - shl-int v2, v0, v1
Shift v0 left by the positions specified by v1 and store the result in v2.
99
shr-int vx, vy, vz
Shift vy right by the positions specified by vz and store the result into vx.
9902 0001 - shr-int v2, v0, v1
Shift v0 right by the positions specified by v1 and store the result in v2.
9A
ushr-int vx, vy, vz
Unsigned shift right (>>>) vy by the positions specified by vz and store the result into vx.
9A02 0001 - ushr-int v2, v0, v1
Unsigned shift v0 right by the positions specified by v1 and store the result in v2.
9B
add-long vx, vy, vz
Adds vy to vz and puts the result into vx1.
9B00 0305 - add-long v0, v3, v5
The long value in v3,v4 is added to the value in v5,v6 and the result is stored in v0,v1.
9C
sub-long vx,vy,vz
Calculates vy-vz and puts the result into vx1.
9C00 0305 - sub-long v0, v3, v5
Subtracts the long value in v5,v6 from the long value in v3,v4 and puts the result into v0,v1.
9D
mul-long vx,vy,vz
Calculates vy*vz and puts the result into vx1.9D00 0305 - mul-long v0, v3, v5
Multiplies the long value in v5,v6 with the long value in v3,v4 and puts the result into v0,v1.
9E
div-long vx, vy, vz
Calculates vy/vz and puts the result into vx1.
9E06 0002 - div-long v6, v0, v2
Divides the long value in v0,v1 with the long value in v2,v3 and pust the result into v6,v7.
9F
rem-long vx,vy,vz
Calculates vy % vz and puts the result into vx1.9F06 0002 - rem-long v6, v0, v2
Calculates v0,v1 %  v2,v3 and puts the result into v6,v7.
A0
and-long vx, vy, vz
Calculates the vy AND vz and puts the result into vx1.A006 0002 - and-long v6, v0, v2
Calculates v0,v1 AND v2,v3 and puts the result into v6,v7.
A1
or-long vx, vy, vz
Calculates the vy OR vz and puts the result into vx1.
A106 0002 - or-long v6, v0, v2
Calculates v0,v1 OR v2,v3 and puts the result into v6,v7.
A2
xor-long vx, vy, vz
Calculates the vy XOR vz and puts the result into vx1.A206 0002 - xor-long v6, v0, v2
Calculates v0,v1 XOR v2,v3 and puts the result into v6,v7.
A3
shl-long vx, vy, vz
Shifts left vy by vz positions and stores the result in vx1.A302 0004 - shl-long v2, v0, v4
Shift v0,v1 by postions specified by v4 and puts the result into v2,v3.
A4
shr-long vx,vy,vz
Shifts right vy by vz positions and stores the result in vx1.
A402 0004 - shr-long v2, v0, v4
Shift v0,v1 by postions specified by v4 and puts the result into v2,v3.
A5
ushr-long vx, vy, vz
Unsigned shifts right vy by vz positions and stores the result in vx1.A502 0004 - ushr-long v2, v0, v4
Unsigned shift v0,v1 by postions specified by v4 and puts the result into v2,v3.
A6
add-float vx,vy,vz
Adds vy to vz and puts the result into vx.
A600 0203 - add-float v0, v2, v3
Adds the floating point numbers in v2 and v3 and puts the result into v0.
A7
sub-float vx,vy,vz
Calculates vy-vz and puts the result into vx.A700 0203 - sub-float v0, v2, v3
Calculates v2-v3 and puts the result into v0.
A8
mul-float vx, vy, vz
Multiplies vy with vz and puts the result into vx.
A803 0001 - mul-float v3, v0, v1
Multiplies v0 with v1 and puts the result into v3.
A9
div-float vx, vy, vz
Calculates vy/vz and puts the result into vx.
A903 0001 - div-float v3, v0, v1
Divides v0 with v1 and puts the result into v3.
AA
rem-float vx,vy,vz
Calculates vy % vz and puts the result into vx.AA03 0001 - rem-float v3, v0, v1
Calculates v0 %  v1 and puts the result into v3.
AB
add-double vx,vy,vz
Adds vy to vz and puts the result into vx1
AB00 0305 - add-double v0, v3, v5
Adds the double value in v5,v6 registers to the double value in v3,v4 registers and places the result  in v0,v1 registers.
AC
sub-double vx,vy,vz
Calculates vy-vz and puts the result into vx1.
AC00 0305 - sub-double v0, v3, v5
Subtracts the value in v5,v6 from the value in v3,v4 and puts the result into v0,v1.
AD
mul-double vx, vy, vz
Multiplies vy with vz and puts the result into vx1.
AD06 0002 - mul-double v6, v0, v2
Multiplies the double value in v0,v1 with the double value in v2,v3 and puts the result into v6,v7.
AE
div-double vx, vy, vz
Calculates vy/vz and puts the result into vx1.
AE06 0002 - div-double v6, v0, v2
Divides the double value in v0,v1 with the double value in v2,v3 and puts the result into v6,v7.
AF
rem-double vx,vy,vz
Calculates vy % vz and puts the result into vx1.AF06 0002 - rem-double v6, v0, v2
Calculates v0,v1 % v2,v3 and puts the result into v6,v7.
B0
add-int/2addr vx,vy
Adds vy to vx.
B010 - add-int/2addr v0,v1
Adds v1 to v0.
B1
sub-int/2addr vx,vy
Calculates vx-vy and puts the result into vx.
B140 - sub-int/2addr v0, v4
Subtracts v4 from v0 and puts the result into v0.
B2
mul-int/2addr vx,vy
Multiplies vx with vy.
B210 - mul-int/2addr v0, v1
Multiples v0 with v1 and puts the result into v0.
B3
div-int/2addr vx,vy
Divides vx with vy and puts the result into vx.
B310 - div-int/2addr v0, v1
Divides v0 with v1 and puts the result into v0.
B4
rem-int/2addr vx,vy
Calculates vx % vy and puts the result into vxB410 - rem-int/2addr v0, v1
 Calculates v0 % v1 and puts the result into v0.
B5
and-int/2addr vx, vy
Calculates vx AND vy and puts the result into vx.
B510 - and-int/2addr v0, v1
Calculates v0 AND v1 and puts the result into v0.
B6
or-int/2addr vx, vy
Calculates vx OR vy and puts the result into vx.
B610 - or-int/2addr v0, v1
Calculates v0 OR v1 and puts the result into v0.
B7
xor-int/2addr vx, vy
Calculates vx XOR vy and puts the result into vx.B710  - xor-int/2addr v0, v1
Calculates v0 XOR v1 and puts the result into v0.
B8
shl-int/2addr vx, vy
Shifts vx left by vy positions.
B810 - shl-int/2addr v0, v1
Shift v0 left by v1 positions.
B9
shr-int/2addr vx, vy
Shifts vx right by vy positions.
B910 - shr-int/2addr v0, v1
Shift v0 right by v1 positions.
BA
ushr-int/2addr vx, vy
Unsigned shift right (>>>) vx by the positions specified by vy.
BA10 - ushr-int/2addr v0, v1
Unsigned shift v0 by the positions specified by v1.
BB
add-long/2addr vx,vy
Adds vy to vx1.
BB20 - add-long/2addr v0, v2
Adds the long value in v2,v3 registers to the long value in v0,v1 registers.
BC
sub-long/2addr vx,vy
Calculates vx-vy and puts the result into vx1.
BC70 - sub-long/2addr v0, v7
Subtracts the long value in v7,v8 from the long value in v0,v1 and puts the result into v0,v1.
BD
mul-long/2addr vx,vy
Calculates vx*vy and puts the result into vx1.BD70 - mul-long/2addr v0, v7
Multiplies the long value in v7,v8 with the long value in v0,v1 and puts the result into v0,v1.
BE
div-long/2addr vx, vy
Calculates vx/vy and puts the result into vx1.
BE20 - div-long/2addr v0, v2
Divides the long value in v0,v1 with the long value in v2,v3 and puts the result into v0,v1
BF
rem-long/2addr vx,vy
Calculates vx % vy and puts the result into vx1.BF20 - rem-long/2addr v0, v2
Calculates v0,v1 % v2,v3 and puts the result into v0,v1
C0
and-long/2addr vx, vy
Calculates vx AND vy and puts the result into vx1.C020 - and-long/2addr v0, v2
Calculates v0,v1 OR v2,v3 and puts the result into v0,v1.
C1
or-long/2addr vx, vy
Calculates vx OR vy and puts the result into vx1.
C120  - or-long/2addr v0, v2
Calculates v0,v1 OR v2,v3 and puts the result into v0,v1.
C2
xor-long/2addr vx, vy
Calculates vx XOR vy and puts the result into vx1.C220 - xor-long/2addr v0, v2
Calculates v0,v1 XOR v2,v3 and puts the result into v0,v1.
C3
shl-long/2addr vx, vy
Shifts left the value in vx,vx+1 by the positions specified by vy and stores the result in vx,vx+1.
C320 - shl-long/2addr v0, v2
Shifts left v0,v1 by the positions specified by v2.
C4
shr-long/2addr vx, vy
Shifts right the value in vx,vx+1 by the positions specified by vy and stores the result in vx,vx+1.C420 - shr-long/2addr v0, v2
Shifts right v0,v1 by the positions specified by v2.
C5
ushr-long/2addr vx, vy
Unsigned shifts right the value in vx,vx+1 by the positions specified by vy and stores the result in vx,vx+1.C520 - ushr-long/2addr v0, v2
Unsigned shifts right v0,v1 by the positions specified by v2.
C6
add-float/2addr vx,vy
Adds vy to vx. 
C640 - add-float/2addr v0,v4
Adds v4 to v0.
C7
sub-float/2addr vx,vy
Calculates vx-vy and stores the result in vx.C740 - sub-float/2addr v0,v4
Adds v4 to v0.
C8
mul-float/2addr vx, vy
Multiplies vx with vy.
C810 - mul-float/2addr v0, v1
Multiplies v0 with v1.
C9
div-float/2addr vx, vy
Calculates vx/vy and puts the result into vx.
C910 - div-float/2addr v0, v1
Divides v0 with v1 and puts the result into v0.
CA
rem-float/2addr vx,vy
Calculates vx/vy and puts the result into vx.CA10 - rem-float/2addr v0, v1
 Calculates v0 % v1 and puts the result into v0.
CB
add-double/2addr vx, vy
Adds vy to vx1.
CB70 - add-double/2addr v0, v7
Adds v7 to v0.
CC
sub-double/2addr vx, vy
Calculates vx-vy and puts the result into vx1.
CC70 - sub-double/2addr v0, v7
Subtracts the value in v7,v8 from the value in v0,v1 and puts the result into v0,v1.
CD
mul-double/2addr vx, vy
Multiplies vx with vy1.
CD20 - mul-double/2addr v0, v2
Multiplies the double value in v0,v1 with the double value in v2,v3 and puts the result into v0,v1.
CE
div-double/2addr vx, vy
Calculates vx/vy and puts the result into vx1.
CE20 - div-double/2addr v0, v2
Divides the double value in v0,v1 with the double value in v2,v3 and puts the value into v0,v1.
CF
rem-double/2addr vx,vy
Calculates vx % vy and puts the result into vx1.CF20 - rem-double/2addr v0, v2
 Calculates  v0,v1 %  v2,v3 and puts the value into v0,v1.
D0
add-int/lit16 vx,vy,lit16
Adds vy to lit16 and stores the result into vx.
D001 D204 - add-int/lit16 v1, v0, #int 1234 // #04d2
Adds v0 to literal 1234 and stores the result into v1.
D1
sub-int/lit16 vx,vy,lit16
Calculates vy - lit16 and stores the result into vx.
D101 D204 - sub-int/lit16 v1, v0, #int 1234 // #04d2
Calculates v0 - literal 1234 and stores the result into v1.
D2
mul-int/lit16 vx,vy,lit16
Calculates vy * lit16 and stores the result into vx.D201 D204 - mul-int/lit16 v1, v0, #int 1234 // #04d2
Calculates v0 * literal 1234 and stores the result into v1.
D3
div-int/lit16 vx,vy,lit16
Calculates vy / lit16 and stores the result into vx.D301 D204 - div-int/lit16 v1, v0, #int 1234 // #04d2
Calculates v0 / literal 1234 and stores the result into v1.
D4
rem-int/lit16 vx,vy,lit16
Calculates vy % lit16 and stores the result into vx.D401 D204 - rem-int/lit16 v1, v0, #int 1234 // #04d2
Calculates v0 % literal 1234 and stores the result into v1.
D5
and-int/lit16 vx,vy,lit16
Calculates vy AND lit16 and stores the result into vx.D501 D204 - and-int/lit16 v1, v0, #int 1234 // #04d2
Calculates v0 AND literal 1234 and stores the result into v1.
D6
or-int/lit16 vx,vy,lit16
Calculates vy OR lit16 and stores the result into vx.D601 D204 - or-int/lit16 v1, v0, #int 1234 // #04d2
Calculates v0 OR literal 1234 and stores the result into v1.
D7
xor-int/lit16 vx,vy,lit16
Calculates vy XOR lit16 and stores the result into vx.D701 D204 - xor-int/lit16 v1, v0, #int 1234 // #04d2
Calculates v0 XOR literal 1234 and stores the result into v1.
D8
add-int/lit8 vx,vy,lit8
Adds vy to lit8 and stores the result into vx.
D800 0201 - add-int/lit8 v0,v2, #int1
Adds literal 1 to v2 and stores the result into v0.
D9
sub-int/lit8 vx,vy,lit8
Calculates vy-lit8 and stores the result into vx.D900 0201 - sub-int/lit8 v0,v2, #int1
Calculates v2-1 and stores the result into v0.
DA
mul-int/lit8 vx,vy,lit8
Multiplies vy with lit8 8-bit literal constant and puts the result into vx.
DA00 0002 - mul-int/lit8 v0,v0, #int2
Multiplies v0 with literal 2 and puts the result into v0.
DB
div-int/lit8 vx,vy,lit8
Calculates vy/lit8 and stores the result into vx.DB00 0203 - mul-int/lit8 v0,v2, #int3
Calculates v2/3 and stores the result into v0.
DC
rem-int/lit8 vx,vy,lit8
Calculates vy % lit8 and stores the result into vx.DC00 0203 - rem-int/lit8 v0,v2, #int3
Calculates v2 % 3 and stores the result into v0.
DD
and-int/lit8 vx,vy,lit8
Calculates vy AND lit8 and stores the result into vx.DD00 0203 - and-int/lit8 v0,v2, #int3
Calculates v2 AND 3 and stores the result into v0.
DE
or-int/lit8 vx, vy, lit8
Calculates vy OR lit8 and puts the result into vx.
DE00 0203 - or-int/lit8 v0, v2, #int 3
Calculates v2 OR literal 3 and puts the result into v0.
DF
xor-int/lit8 vx, vy, lit8
Calculates vy XOR lit8 and puts the result into vx.DF00 0203     |  0008: xor-int/lit8 v0, v2, #int 3
Calculates v2 XOR literal 3 and puts the result into v0.
E0
shl-int/lit8 vx, vy, lit8
Shift v0 left by the bit positions specified by the literal constant and put the result into vx.E001 0001 - shl-int/lit8 v1, v0, #int 1
Shift v0 left by 1 position and put the result into v1.
E1
shr-int/lit8 vx, vy, lit8
Shift v0 right by the bit positions specified by the literal constant and put the result into vx.
E101 0001 - shr-int/lit8 v1, v0, #int 1
Shift v0 right by 1 position and put the result into v1.
E2
ushr-int/lit8 vx, vy, lit8
Unsigned right shift of v0 (>>>) by the bit positions specified by the literal constant and put the result into vx.E201 0001 - ushr-int/lit8 v1, v0, #int 1
Unsigned shift v0 right by 1 position and put the result into v1.
E3
unused_E3


E4
unused_E4


E5
unused_E5


E6
unused_E6


E7
unused_E7


E8
unused_E8


E9
unused_E9


EA
unused_EA


EB
unused_EB


EC
unused_EC


ED
unused_ED


EE
execute-inline {parameters},inline ID
Executes the inline method identified by inline ID6.
EE20 0300 0100 - execute-inline {v1, v0}, inline #0003
Executes inline method #3 using v1 as "this" and passing one parameter in v0.
EF
unused_EF


F0
invoke-direct-empty
Stands as a placeholder for pruned empty methods like Object.<init>. This acts as nop during normal execution6.
F010 F608 0000 - invoke-direct-empty {v0}, Ljava/lang/Object;.<init>:()V // method@08f6
Replacement for the empty method java/lang/Object;<init>.
F1
unused_F1


F2
iget-quick vx,vy,offset
Gets the value stored at offset in vy instance's data area to vx6.F221 1000 - iget-quick v1, v2, [obj+0010]
Gets the value at offset 0CH of the instance pointed by v2 and stores the object reference in v1.
F3
iget-wide-quick vx,vy,offset
Gets the object reference value stored at offset in vy instance's data area to vx,vx+16.F364 3001 - iget-wide-quick v4, v6, [obj+0130]
Gets the value at offset 130H of the instance pointed by v6 and stores the object reference in v4,v5.
F4
iget-object-quick vx,vy,offset
Gets the object reference value stored at offset in vy instance's data area to vx6.
F431 0C00 - iget-object-quick v1, v3, [obj+000c]
Gets the object reference value at offset 0CH of the instance pointed by v3 and stores the object reference in v1.
F5
iput-quick vx,vy,offset
Puts the value stored in vx to offset in vy instance's data area6.F521 1000  - iput-quick v1, v2, [obj+0010]
Puts the object reference value in v1 to offset 10H of the instance pointed by v2.
F6
iput-wide-quick vx,vy,offset
Puts the value stored in vx,vx+1 to offset in vy instance's data area6.F652 7001 - iput-wide-quick v2, v5, [obj+0170]
Puts the value in v2,v3 to offset 170H of the instance pointed by v5.
F7
iput-object-quick vx,vy,offset
Puts the object reference value stored in vx to offset in vy instance's data area to vx6.F701 4C00 - iput-object-quick v1, v0, [obj+004c]
Puts the object reference value in v1 to offset 0CH of the instance pointed by v3.
F8
invoke-virtual-quick {parameters},vtable offset
Invokes a virtual method using the vtable of the target object6.
F820 B800 CF00 - invoke-virtual-quick {v15, v12}, vtable #00b8
Invokes a virtual method. The target object instance is pointed by v15 and vtable entry #B8 points to the method to be called. v12 is a parameter to the method call.
F9
invoke-virtual-quick/range {parameter range},vtable offset
Invokes a virtual method using the vtable of the target object6F906 1800 0000 - invoke-virtual-quick/range {v0..v5},vtable #0018
Invokes a method using the vtable of the instance pointed by v0. v1..v5 registers are parameters to the method call.
FA
invoke-super-quick {parameters},vtable offset
Invokes a virtual method in the target object's immediate parent class using the vtable of that parent class6.FA40 8100 3254  - invoke-super-quick {v2, v3, v4, v5}, vtable #0081
Invokes a method using the vtable of the immediate parent class of instance pointed by v2. v3, v4 and v5 registers are parameters to the method call.
FB
invoke-super-quick/range {register range},vtable offset
Invokes a virtual method in the target object's immediate parent class using the vtable of that parent class6.
F906 1B00 0000 - invoke-super-quick/range {v0..v5}, vtable #001b
Invokes a method using the vtable of the immediate parent class of instance pointed by v0. v1..v5 registers are parameters to the method call.
FC
unused_FC


FD
unused_FD


FE
unused_FE


FF
unused_FF




  1. Note that double and long values occupy two registers (e.g. the value addressed by vy is located in vy and vy+1 registers)
  2. The offset can be positive or negative and it is calculated from the offset of the starting byte of the instruction. The offset is always interpreted in words (2 bytes per 1 offset value increment/decrement). Negative offset is stored in two's complement format. The current position is the offset of the starting byte of the instruction.
  3. Compare operations returrn positive value if the first operand is greater than the second operand, 0 if they are equal and negative value if the first operand is smaller than the second operand.
  4. Not seen in the wild, interpolated from Dalvik bytecode list.
  5. The invocation parameter list encoding is somewhat weird. Starting if parameter number > 4 and parameter number % 4 == 1, the 5th (9th, etc.) parameter is encoded on the 4 lowest bit of the byte immediately following the instruction. Curiously, this encoding is not used in case of 1 parameter, in this case an entire 16 bit word is added after the method index of which only 4 bit is used to encode the single parameter while the lowest 4 bit of the byte following the instruction byte is left unused.
  6. This is an unsafe instruction and occurs only in ODEX files.


'Study > mobile' 카테고리의 다른 글

음.. 뽀꼬빵  (0) 2013.12.22
[연습]포코팡 오토(?) POKOPANG AUTO~  (3) 2013.12.17
[android]change system date & time  (0) 2013.11.19
[Android]Monkeyrunner  (0) 2013.11.05
[펌]USB 드라이버가 없는 안드로이드 기기의 설치  (0) 2013.09.12
Posted by 땡보
2014. 10. 12. 14:51

원문 LINK : http://coverage.livinglogic.de/Lib/ctypes/wintypes.py.html

Python code coverage for Lib/ctypes/wintypes.py

#countcontent
1n/a# The most useful windows datatypes
2n/aimport ctypes
3n/a
4n/aBYTE = ctypes.c_byte
5n/aWORD = ctypes.c_ushort
6n/aDWORD = ctypes.c_ulong
7n/a
8n/a#UCHAR = ctypes.c_uchar
9n/aCHAR = ctypes.c_char
10n/aWCHAR = ctypes.c_wchar
11n/aUINT = ctypes.c_uint
12n/aINT = ctypes.c_int
13n/a
14n/aDOUBLE = ctypes.c_double
15n/aFLOAT = ctypes.c_float
16n/a
17n/aBOOLEAN = BYTE
18n/aBOOL = ctypes.c_long
19n/a
20n/aclass VARIANT_BOOL(ctypes._SimpleCData):
21n/a _type_ = "v"
22n/a def __repr__(self):
23n/a return "%s(%r)" % (self.__class__.__name__, self.value)
24n/a
25n/aULONG = ctypes.c_ulong
26n/aLONG = ctypes.c_long
27n/a
28n/aUSHORT = ctypes.c_ushort
29n/aSHORT = ctypes.c_short
30n/a
31n/a# in the windows header files, these are structures.
32n/a_LARGE_INTEGER = LARGE_INTEGER = ctypes.c_longlong
33n/a_ULARGE_INTEGER = ULARGE_INTEGER = ctypes.c_ulonglong
34n/a
35n/aLPCOLESTR = LPOLESTR = OLESTR = ctypes.c_wchar_p
36n/aLPCWSTR = LPWSTR = ctypes.c_wchar_p
37n/aLPCSTR = LPSTR = ctypes.c_char_p
38n/aLPCVOID = LPVOID = ctypes.c_void_p
39n/a
40n/a# WPARAM is defined as UINT_PTR (unsigned type)
41n/a# LPARAM is defined as LONG_PTR (signed type)
42n/aif ctypes.sizeof(ctypes.c_long) == ctypes.sizeof(ctypes.c_void_p):
43n/a WPARAM = ctypes.c_ulong
44n/a LPARAM = ctypes.c_long
45n/aelif ctypes.sizeof(ctypes.c_longlong) == ctypes.sizeof(ctypes.c_void_p):
46n/a WPARAM = ctypes.c_ulonglong
47n/a LPARAM = ctypes.c_longlong
48n/a
49n/aATOM = WORD
50n/aLANGID = WORD
51n/a
52n/aCOLORREF = DWORD
53n/aLGRPID = DWORD
54n/aLCTYPE = DWORD
55n/a
56n/aLCID = DWORD
57n/a
58n/a################################################################
59n/a# HANDLE types
60n/aHANDLE = ctypes.c_void_p # in the header files: void *
61n/a
62n/aHACCEL = HANDLE
63n/aHBITMAP = HANDLE
64n/aHBRUSH = HANDLE
65n/aHCOLORSPACE = HANDLE
66n/aHDC = HANDLE
67n/aHDESK = HANDLE
68n/aHDWP = HANDLE
69n/aHENHMETAFILE = HANDLE
70n/aHFONT = HANDLE
71n/aHGDIOBJ = HANDLE
72n/aHGLOBAL = HANDLE
73n/aHHOOK = HANDLE
74n/aHICON = HANDLE
75n/aHINSTANCE = HANDLE
76n/aHKEY = HANDLE
77n/aHKL = HANDLE
78n/aHLOCAL = HANDLE
79n/aHMENU = HANDLE
80n/aHMETAFILE = HANDLE
81n/aHMODULE = HANDLE
82n/aHMONITOR = HANDLE
83n/aHPALETTE = HANDLE
84n/aHPEN = HANDLE
85n/aHRGN = HANDLE
86n/aHRSRC = HANDLE
87n/aHSTR = HANDLE
88n/aHTASK = HANDLE
89n/aHWINSTA = HANDLE
90n/aHWND = HANDLE
91n/aSC_HANDLE = HANDLE
92n/aSERVICE_STATUS_HANDLE = HANDLE
93n/a
94n/a################################################################
95n/a# Some important structure definitions
96n/a
97n/aclass RECT(ctypes.Structure):
98n/a _fields_ = [("left", LONG),
99n/a ("top", LONG),
100n/a ("right", LONG),
101n/a ("bottom", LONG)]
102n/atagRECT = _RECTL = RECTL = RECT
103n/a
104n/aclass _SMALL_RECT(ctypes.Structure):
105n/a _fields_ = [('Left', SHORT),
106n/a ('Top', SHORT),
107n/a ('Right', SHORT),
108n/a ('Bottom', SHORT)]
109n/aSMALL_RECT = _SMALL_RECT
110n/a
111n/aclass _COORD(ctypes.Structure):
112n/a _fields_ = [('X', SHORT),
113n/a ('Y', SHORT)]
114n/a
115n/aclass POINT(ctypes.Structure):
116n/a _fields_ = [("x", LONG),
117n/a ("y", LONG)]
118n/atagPOINT = _POINTL = POINTL = POINT
119n/a
120n/aclass SIZE(ctypes.Structure):
121n/a _fields_ = [("cx", LONG),
122n/a ("cy", LONG)]
123n/atagSIZE = SIZEL = SIZE
124n/a
125n/adef RGB(red, green, blue):
126n/a return red + (green << 8) + (blue << 16)
127n/a
128n/aclass FILETIME(ctypes.Structure):
129n/a _fields_ = [("dwLowDateTime", DWORD),
130n/a ("dwHighDateTime", DWORD)]
131n/a_FILETIME = FILETIME
132n/a
133n/aclass MSG(ctypes.Structure):
134n/a _fields_ = [("hWnd", HWND),
135n/a ("message", UINT),
136n/a ("wParam", WPARAM),
137n/a ("lParam", LPARAM),
138n/a ("time", DWORD),
139n/a ("pt", POINT)]
140n/atagMSG = MSG
141n/aMAX_PATH = 260
142n/a
143n/aclass WIN32_FIND_DATAA(ctypes.Structure):
144n/a _fields_ = [("dwFileAttributes", DWORD),
145n/a ("ftCreationTime", FILETIME),
146n/a ("ftLastAccessTime", FILETIME),
147n/a ("ftLastWriteTime", FILETIME),
148n/a ("nFileSizeHigh", DWORD),
149n/a ("nFileSizeLow", DWORD),
150n/a ("dwReserved0", DWORD),
151n/a ("dwReserved1", DWORD),
152n/a ("cFileName", CHAR * MAX_PATH),
153n/a ("cAlternateFileName", CHAR * 14)]
154n/a
155n/aclass WIN32_FIND_DATAW(ctypes.Structure):
156n/a _fields_ = [("dwFileAttributes", DWORD),
157n/a ("ftCreationTime", FILETIME),
158n/a ("ftLastAccessTime", FILETIME),
159n/a ("ftLastWriteTime", FILETIME),
160n/a ("nFileSizeHigh", DWORD),
161n/a ("nFileSizeLow", DWORD),
162n/a ("dwReserved0", DWORD),
163n/a ("dwReserved1", DWORD),
164n/a ("cFileName", WCHAR * MAX_PATH),
165n/a ("cAlternateFileName", WCHAR * 14)]
166n/a
167n/a################################################################
168n/a# Pointer types
169n/a
170n/aLPBOOL = PBOOL = ctypes.POINTER(BOOL)
171n/aPBOOLEAN = ctypes.POINTER(BOOLEAN)
172n/aLPBYTE = PBYTE = ctypes.POINTER(BYTE)
173n/aPCHAR = ctypes.POINTER(CHAR)
174n/aLPCOLORREF = ctypes.POINTER(COLORREF)
175n/aLPDWORD = PDWORD = ctypes.POINTER(DWORD)
176n/aLPFILETIME = PFILETIME = ctypes.POINTER(FILETIME)
177n/aPFLOAT = ctypes.POINTER(FLOAT)
178n/aLPHANDLE = PHANDLE = ctypes.POINTER(HANDLE)
179n/aPHKEY = ctypes.POINTER(HKEY)
180n/aLPHKL = ctypes.POINTER(HKL)
181n/aLPINT = PINT = ctypes.POINTER(INT)
182n/aPLARGE_INTEGER = ctypes.POINTER(LARGE_INTEGER)
183n/aPLCID = ctypes.POINTER(LCID)
184n/aLPLONG = PLONG = ctypes.POINTER(LONG)
185n/aLPMSG = PMSG = ctypes.POINTER(MSG)
186n/aLPPOINT = PPOINT = ctypes.POINTER(POINT)
187n/aPPOINTL = ctypes.POINTER(POINTL)
188n/aLPRECT = PRECT = ctypes.POINTER(RECT)
189n/aLPRECTL = PRECTL = ctypes.POINTER(RECTL)
190n/aLPSC_HANDLE = ctypes.POINTER(SC_HANDLE)
191n/aPSHORT = ctypes.POINTER(SHORT)
192n/aLPSIZE = PSIZE = ctypes.POINTER(SIZE)
193n/aLPSIZEL = PSIZEL = ctypes.POINTER(SIZEL)
194n/aPSMALL_RECT = ctypes.POINTER(SMALL_RECT)
195n/aLPUINT = PUINT = ctypes.POINTER(UINT)
196n/aPULARGE_INTEGER = ctypes.POINTER(ULARGE_INTEGER)
197n/aPULONG = ctypes.POINTER(ULONG)
198n/aPUSHORT = ctypes.POINTER(USHORT)
199n/aPWCHAR = ctypes.POINTER(WCHAR)
200n/aLPWIN32_FIND_DATAA = PWIN32_FIND_DATAA = ctypes.POINTER(WIN32_FIND_DATAA)
201n/aLPWIN32_FIND_DATAW = PWIN32_FIND_DATAW = ctypes.POINTER(WIN32_FIND_DATAW)
202n/aLPWORD = PWORD = ctypes.POINTER(WORD)


'Study > python' 카테고리의 다른 글

[연습]올파일포유?? ㅋㅋ  (0) 2018.05.11
[연습]모두의 경영 헬퍼  (0) 2015.09.14
shutil copyfileobj ()  (0) 2014.09.03
[연습]AutoPOKO ~~  (0) 2013.11.11
[펌]python thread 사용예  (0) 2013.10.16
Posted by 땡보
2014. 10. 2. 11:25

Disable ASLR on Windows 7

A registry setting to forcibly enable or disable ASLR (Address Space Layout Randomization) for all executables and libraries.

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management]
“MoveImages”=dword:00000000


Win7_disable_aslr.reg


Posted by 땡보
2014. 9. 3. 08:07
shutil.copyfileobj(fsrc, fdst[, length])
Copy the contents of the file-like object fsrc to the file-like object fdst. The integer length, if given, is the buffer size. In particular, a negative length value means to copy the data without looping over the source data in chunks; by default the data is read in chunks to avoid uncontrolled memory consumption. Note that if
the current file position of the fsrc object is not 0, only the contents from the current file position to the end of the file will be copied.

'Study > python' 카테고리의 다른 글

[연습]모두의 경영 헬퍼  (0) 2015.09.14
[펌]Python code coverage for Lib/ctypes/wintypes.py  (0) 2014.10.12
[연습]AutoPOKO ~~  (0) 2013.11.11
[펌]python thread 사용예  (0) 2013.10.16
[연습]wxpython rss reader  (0) 2013.10.06
Posted by 땡보
2013. 12. 22. 00:05

빨간색 1 
노란색 2 
파란색 3 
초록색 4 
보라색 5 
파란색 블록( 주위 블록 끌어당김 ) 8 

Posted by 땡보
2013. 12. 17. 00:35

UI automation 연습겸 장난삼아 작성해본 포코팡 오토(?)라고 하기엔 너무 멍청함.. ㅋㅋ

구현기능

1. 무한반복 플레이

2. 클로버 자동충전

역시 손은 눈보다 빠름.. ㅎㅎ


'Study > mobile' 카테고리의 다른 글

[android]Dalvik opcodes  (0) 2015.03.15
음.. 뽀꼬빵  (0) 2013.12.22
[android]change system date & time  (0) 2013.11.19
[Android]Monkeyrunner  (0) 2013.11.05
[펌]USB 드라이버가 없는 안드로이드 기기의 설치  (0) 2013.09.12
Posted by 땡보