package
dt.capstone_arm64;
import
android.support.v7.app.AppCompatActivity;
import
android.os.Bundle;
import
android.util.Log;
import
capstone.Capstone;
/**
* 示例: 使用capstone反汇编引擎反编译64位汇编代码;
*
*
* 程序输出:
* CAPSTONE-X86-64: =========== X86-64 反汇编引擎使用 =========开始==
* CAPSTONE-X86-64: 4096 push rbp
* CAPSTONE-X86-64: 4097 mov rax, qword ptr [rip + 0x13b8]
* CAPSTONE-X86-64: =========== X86-64 反汇编引擎使用 =========结束==
* CAPSTONE-ARM-64: =========== ARM-64 反汇编引擎使用 =========开始==
* CAPSTONE-ARM-64: 4096 ldr x1, [x20]
* CAPSTONE-ARM-64: 4100 mov x0, x19
* CAPSTONE-ARM-64: 4104 bl #0xccc
* CAPSTONE-ARM-64: 4108 movz w0, #0xa
* CAPSTONE-ARM-64: =========== ARM-64 反汇编引擎使用 =========结束==
*/
public
class
MainActivity
extends
AppCompatActivity {
/***********************************************************************************************
[ARM-64 汇编代码]
.text:0000000000001164 81 02 40 F9 LDR X1, [X20]
.text:0000000000001168 E0 03 13 AA MOV X0, X19
.text:000000000000116C 31 FF FF 97 BL sub_E30
.text:0000000000001170 40 01 80 52 MOV W0, #0xA
**********************************************************************************************/
private
byte
[] ARM64_CODE = {(
byte
)
0x81
,
0x02
,
0x40
, (
byte
)
0xF9
, (
byte
)
0xe0
,
0x03
,
0x13
, (
byte
)
0xAA
,
0x31
, (
byte
)
0xFF
, (
byte
)
0xFF
, (
byte
)
0x97
,
0x40
,
0x01
, (
byte
)
0x80
,
0x52
};
private
byte
[] X86_CODE = {
0x55
,
0x48
, (
byte
)
0x8b
,
0x05
, (
byte
)
0xb8
,
0x13
,
0x00
,
0x00
};
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Capstone cs_x86 =
new
Capstone(Capstone.CS_ARCH_X86, Capstone.CS_MODE_64);
Capstone.CsInsn[] allInsn = cs_x86.disasm(X86_CODE,
0x1000
);
Log.e(
"CAPSTONE-X86-64"
,
"=========== X86-64 反汇编引擎使用 =========开始=="
);
for
(
int
i =
0
; i < allInsn.length; i++) {
Log.e(
"CAPSTONE-X86-64"
, allInsn.address +
" "
+ allInsn.mnemonic +
" "
+ allInsn.opStr);
}
Log.e(
"CAPSTONE-X86-64"
,
"=========== X86-64 反汇编引擎使用 =========结束=="
);
Capstone cs_arm64 =
new
Capstone(Capstone.CS_ARCH_ARM64, Capstone.CS_MODE_ARM);
Capstone.CsInsn[] allInsn_arm64 = cs_arm64.disasm(ARM64_CODE,
0x1000
);
Log.e(
"CAPSTONE-ARM-64"
,
"=========== ARM-64 反汇编引擎使用 =========开始=="
);
for
(
int
i =
0
; i < allInsn_arm64.length; i++) {
Log.e(
"CAPSTONE-ARM-64"
, allInsn_arm64.address +
" "
+ allInsn_arm64.mnemonic +
" "
+ allInsn_arm64.opStr);
}
Log.e(
"CAPSTONE-ARM-64"
,
"=========== ARM-64 反汇编引擎使用 =========结束=="
);
}
}