[Java] 纯文本查看 复制代码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);
/* [X86-64 反汇编引擎使用] */
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 反汇编引擎使用 =========结束==");
/* [ARM-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 反汇编引擎使用 =========结束==");
}
}