cmake+unicorn引擎 纯C代码模拟ARM汇编指令简单实现两个数相加

项目结构

汇编相加代码

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://github.com/kabeor/Micro-Unicorn-Engine-API-Documentation/blob/master/Micro%20Unicorn-Engine%20API%20Documentation.md

https://bbs.pediy.com/thread-266869.htm

https://stackoverflow.com/questions/40196373/how-to-link-math-h-library-using-cmake

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jitcor

觉得有用,不赏点?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值