当前位置: 首页 > news >正文

2025-10-20

2025-10-20

今天在npc上实现itrace的时候碰到了一个很坑的问题,当然这也可能是我知识不丰富的原因。
NEMU的实现itrace的时候要用到反汇编相关函数,实现的方法是在一个disasm.c中定义了disassemble函数,这个函数会用到capstone动态链接库的内容。让我卡了一段时间的错误有两个,一个是这个动态链接库怎么处理,另一个是这个反汇编函数的初始化函数init_disasm一直报错。

第一个问题其实比较简单,NEMU中是用了dlopen打开动态链接库然后加载函数句柄来调用动态链接库里的内容的,所以这部分不需要处理,在c代码中指定好库的位置即可。

第二个问题有点坑,原先的init_disasm函数是这样的

void init_disasm() {void *dl_handle;dl_handle = dlopen("tools/capstone/repo/libcapstone.so.5", RTLD_LAZY);assert(dl_handle);cs_err (*cs_open_dl)(cs_arch arch, cs_mode mode, csh *handle) = NULL;cs_open_dl = dlsym(dl_handle, "cs_open");assert(cs_open_dl);cs_disasm_dl = dlsym(dl_handle, "cs_disasm");assert(cs_disasm_dl);cs_free_dl = dlsym(dl_handle, "cs_free");assert(cs_free_dl);...

在NPC下编译的时候会报这种错误

invalid conversion from 'void*' to 'cs_err (*)(cs_arch,cs_mode,csh*)

dlsym的作用是在打开的库中寻找匹配的函数并返回函数指针,在NEMU中这样是没问题的,因为NEMU都是按照C语言来编译的,C语言允许这种隐式的类型转换,但是NPC是用Verilator编译的,是按照CPP编译的,而C++是不允许这种写法的,所以需要显示得指出函数类型转换,最终代码如下

void init_disasm() {void *dl_handle;dl_handle = dlopen("lib/libcapstone.so.5", RTLD_LAZY);assert(dl_handle);cs_err (*cs_open_dl)(cs_arch arch, cs_mode mode, csh *handle) = NULL;//cs_open_dl = (cs_err (*)(cs_arch,cs_mode,csh*))dlsym(dl_handle, "cs_open");cs_open_dl = dlsym(dl_handle, "cs_open");assert(cs_open_dl);//cs_err (*cs_disasm_dl)(cs_arch arch, cs_mode mode, csh *handle) = NULL;cs_disasm_dl = (size_t(*)(csh,const uint8_t*,size_t,uint64_t,size_t,cs_insn**))dlsym(dl_handle, "cs_disasm");assert(cs_disasm_dl);//cs_err (*cs_free_dl)(cs_arch arch, cs_mode mode, csh *handle) = NULL;cs_free_dl = (void(*)(cs_insn*,size_t))dlsym(dl_handle, "cs_free");assert(cs_free_dl);...

只是个简单的问题,但是因为前置知识缺乏,这个问题研究了好久

http://www.hskmm.com/?act=detail&tid=35182

相关文章:

  • 2025年轮胎厂家权威推荐榜:舒适轮胎,耐磨轮胎,高性能轮胎品牌综合测评与选购指南
  • 《构建模块化思维---函数(下)》 - 详解
  • 三桶油
  • 2025年市面上防撞板品牌与行业内实力厂家排行榜前十强:权威解析与选择指南
  • 2025年防撞板品牌排名前十权威推荐:行业趋势与选择指南
  • 2025 年液化气压缩机生产厂家最新推荐榜单:聚焦优质企业,深度解析生产实力与产品品质蚌埠液化气压缩机/安徽液化气压缩机厂家推荐
  • 2025年票务系统厂家权威推荐榜:景区售票/闸机/验票系统,智慧文旅平台与票务管理软件全景解析
  • MATLAB实现对角加载波束形成算法
  • 2025年智能吉他厂家权威推荐榜:无弦吉他/自动档吉他/伴奏吉他/MIDI吉他,创新科技与演奏体验完美融合
  • 2025 年压缩机源头厂家最新推荐榜单:覆盖石油化工燃气多领域,精选优质企业解决采购难题
  • 2025 不锈钢加工厂家推荐榜:不锈钢屏风/不锈钢壁龛/不锈钢栏杆/不锈钢楼梯扶手/聚焦精工匠心,这家企业成行业标杆
  • VS 查找对话框 怎么搜索通配符
  • 2025年中医师承与确有专长机构权威推荐榜:传统医学传承与执业资质考取优质机构深度解析
  • Reborn
  • 2025 年南昌瓷砖厂家推荐老龙严选瓷砖图书馆,南昌木纹/小花/岩板/鱼骨拼木纹/莱姆石/金丝绒釉/岩板/素色瓷砖公司推荐
  • 2025年电源适配器厂家推荐排行榜:笔记本电源适配器,手机电源适配器,工业电源适配器,充电器电源适配器公司推荐
  • Failed to activate service ‘org.freedesktop.systemd1‘: timed out - 规格严格
  • 10月20号
  • 2025年焊接设备厂家权威推荐榜:铣边机、铣床、刨边机、滚轮架、变位机全系列专业解析与选购指南
  • 多层感知机笔记
  • MetalLB部署
  • 2025年整平机厂家推荐排行榜,整平机/校平机/矫平机/开平机/平板机/矫直机/校直机,高精度/精密/液压式/数控/金属/高效稳定/多种规格/全自动整平机公司推荐
  • 小程序-视频号显示
  • 学会使用树研究和实现递归算法
  • 多层感知机
  • Sql查询优化方案
  • 实用指南:深入解析HarmonyOS ArkTS:从语法特性到实战应用
  • 2025 防水背衬板厂家最新推荐榜:剖析质量与口碑,优选品牌助您精准采购
  • 如何安装fluentd 和fluentd-mongo的插件?然后收集nginx的 json格式的数据写到mongodb
  • 2025年气柱袋厂家推荐排行榜,防震/防摔/食品级气柱袋,奶瓶/奶粉/电子产品/化妆品气柱袋,缓冲包装与物流运输优选方案