项目结构
汇编相加代码
mov r0,1 //0xE3A00001
mov r1,2 //0xE3A01002
add r2,r0,r1 //0xE0802001
main.c
#include <stdio.h>
#include <stdint.h>
#include "unicorn/unicorn.h"
#define ADDRESS 0x8000
int main() {
uc_engine *uc;
uint32_t r2;
// 汇编代码 指令
// mov r0,1 0xE3A00001
// mov r1,2 0xE3A01002
// add r2,r0,r1 0xE0802001
uint32_t code[]={0xE3A00001,0xE3A01002,0xE0802001};
uc_open(UC_ARCH_ARM,UC_MODE_ARM,&uc);
uc_mem_map(uc,ADDRESS,1024*4,UC_PROT_ALL);
uc_mem_write(uc,ADDRESS,code,sizeof(code));
uc_emu_start(uc,ADDRESS, ADDRESS+sizeof(code),0,0);
uc_reg_read(uc,UC_ARM_REG_R2,&r2);
printf("r2=%d\n",r2);
uc_close(uc);
return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.16.3)
project(demo001 C)
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread")
include_directories(unicorn/include)
link_directories(unicorn)
add_executable(demo001 main.c)
target_link_libraries(demo001 libunicorn.a m)
编译及运行(Linux下(WSL))
完整项目地址
https://download.csdn.net/download/qq_26914291/20087334
参考
https://github.com/unicorn-engine/unicorn
https://www.unicorn-engine.org/docs/tutorial.html
https://www.jianshu.com/p/b3b24482bb03
https://www.jianshu.com/p/37fbe3dd202b
https://bbs.pediy.com/thread-266869.htm
https://stackoverflow.com/questions/40196373/how-to-link-math-h-library-using-cmake