首页 > 其他分享 >llvm后端disassembler流程

llvm后端disassembler流程

时间:2023-04-19 12:01:01浏览次数:33  
标签:XXXDisassembler getInstruction llvm 函数 后端 decodeInstruction cpp disassembler

一、注册

 在添加 \(disassembler\) 时,在 llvm/lib/Target/XXX/Disassembler/XXXDisassembler.cpp 中会通过
\(RegisterMCDisassembler()\) 将该 \(pass\) 进行注册。

二、调用

(1)在 \(XXXDisassembler.cpp\) 中的 \(getInstruction(...)\) 函数重新定义了基类 \(MCDisassembler\) 中的纯虚函数 virtual DecodeStatus getInstruction(...) const = 0;,然后在顶层的 lib/MC/MCDisassembler/Disassembler.cpp 中的 \(LLVMDisasmInstruction()\) 就会调用到派生类中实现的函数 \(getInstruction()\) 函数;
(2)在派生类的 \(getInstruction()\) 中会调用 \(decodeInstruction()\) 对每条指令的目标代码进行反汇编,\(decodeInstruction()\) 位于通过 \(TableGen\) 工具生成的 \(XXXGenDisassemblerTables.inc\) 文件中;
(3)在 \(decodeInstruction()\) 中会通过查表的方式,查询对应该目标代码的指令信息,查询的表也在 \(inc\) 文件中:\(DecoderTableXXX[]\);
(4)当上一过程中查询到该指令后,会进入 \(decodeToMCInst()\),在该函数中会调用定义在 \(XXXDisassembler.cpp\) 中的各种 \(decodeXXX()\) 函数对目标代码进行反汇编,反汇编得到的指令 \(MI\),会在顶层的 lib/MC/MCDisassembler/Disassembler.cpp 中的 \(LLVMDisasmInstruction()\) 中通过 IP->printInst(&Inst, PC, AnnotationsStr, *DC->getSubtargetInfo(), FormattedOS); 操作输出。

标签:XXXDisassembler,getInstruction,llvm,函数,后端,decodeInstruction,cpp,disassembler
From: https://www.cnblogs.com/lxycoding/p/17325061.html

相关文章

  • Ubuntu 18.04 下载安装 llvm (version >= 11)
    添加源你可以在llvm找到适合特定版本的Ubuntu源。cd/etc/aptsudocpsources.listsoures.list.barksudovimsources.list#将下面的llvm源(适用于Ubuntu18.04)粘贴进去debhttp://apt.llvm.org/bionic/llvm-toolchain-bionicmaindeb-srchttp://apt.llvm.org/bionic/......
  • 若依前端后端分离 代码生成修改(1)
    模板引擎修改2023年3月7日9:26主要配置参数的引用和定义表字段.vm模板:参数名使用位置(.vm模板文件中)前端表单表头默认值来源db表:gen_tablepackageNamepackage${packageName}.controller;生成包路径配置文件Package_nameClassName和class......
  • 若依前后端分离 代码生成修改(2)
    修改若依代码生成模块目标:多级目录情况下实现模块名/mvc名[controller/…]/功能名/XXXController原格式:多级目录:模块名/功能名/mvc名[controller/…]/xxxController修改共分为两部分:文件路径和模板代码中的引用路径若依代码生成配置1.修改生成文件路径Com......
  • 互联网医院系统|互联网医院软件|后端开发所需技术
    数字化时代让我们的生活有了许多改变,不论是生活、工作或者是就医都有了许多新的变化,其中医疗行业对我们的影响比较大,互联网医院系统的出现作为一种新型的医疗服务模式,受到了大家的关注和议论,现在许多软件开发公司都会做互联网医院系统,那么你们了解互联网医院软件后端开发技术吗?接下......
  • js将后端返回的文件流导出,并自定义下载文件名(pdf导出)
    这里调接口时记得加上responseType:'blob'/***@description:下载文件*@param{string}data文件流*@param{string}filename文件名*@return{*}*/exportfunctiondownloadFile(data:string,filename:string){constblob=newBlob([data])const......
  • TinyMCE上传图片后端处理写法
    写法有两种,一种是先把图片转换成base64后再本地解析显示,这样可以直接将图片储存在HTML文件中,如果图片过多可能会让HTML文件过大,或者你可以将已经转码成base64的图片上传到服务器后服务器再转码成原jpg或png格式。另一种是方法是通过POST把图片传输给服务器后,服务器再返回图片地址......
  • 后端解决跨域问题
    方法一:在每个controller类里加上跨域注解麻烦,每个控制器都要加注解方法二:写一个全局配置类来处理跨域packagecom.example.config;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springf......
  • 布隆过滤器:后端开发者必学的知识点!
    摘要:对于后端程序员来讲,学习和理解布隆过滤器有很大的必要性。来吧,我们一起品味布隆过滤器的设计之美。本文分享自华为云社区《品味布隆过滤器的设计之美》,作者:勇哥java实战分享。布隆过滤器是一个精巧而且经典的数据结构。你可能没想到:RocketMQ、Hbase、Cassandra、LevelD......
  • 布隆过滤器:后端开发者必学的知识点!
    摘要:对于后端程序员来讲,学习和理解布隆过滤器有很大的必要性。来吧,我们一起品味布隆过滤器的设计之美。本文分享自华为云社区《品味布隆过滤器的设计之美》,作者:勇哥java实战分享。布隆过滤器是一个精巧而且经典的数据结构。你可能没想到:RocketMQ、Hbase、Cassandra、LevelDB、......
  • vue做多选,传递数组类型到后端
    1.需求:多选框选择多个类型,把选中的数据传递到后端当初在做多选框,直接用了element-ui里面的el-check-box属性,在官网里面说,是使用v-modol绑定数值来传递,好嘛,,,传的一直是true!!不是我想要的数据,也是很久没使用vue框架了,做的时候很是怀疑自己,使用value来绑值?使用v-model?使用v-bind???一直试......