首页 > 其他分享 >【介绍一个工具】如何看一个已经编译好的 elf 文件中,某个指令流的原始信息?

【介绍一个工具】如何看一个已经编译好的 elf 文件中,某个指令流的原始信息?

时间:2023-11-03 22:58:58浏览次数:40  
标签:文件 avx 编译 elf 指令流 指令 汇编

作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!


因为 golang 的 plan 9 汇编中不支持部分 avx 指令,因此对于不支持的 avx 指令,只能按照指令格式,以指令流字节的方式把指令插入到汇编代码里,像这样:

	PADDL  X5, X0                    \
	LONG   $0xdacb380f               \ // SHA256RNDS2 XMM3, XMM2
	MOVO   X5, X1                    \
	LONG   $0x0f3a0f66; WORD $0x04cc \ // PALIGNR XMM1, XMM4, 4
	PADDL  X1, X6                    \

指令格式这个感觉还是有点难写,而且某条指令对应的二进制值又去哪里查呢?对于新手还是挺头疼的。

于是我用下面的办法来迂回:

  1. 先用 c + gcc 内置函数来写 avx 指令集的优化代码;
  2. 使用 clang 把 .c 文件编译为 elf 文件;
  3. 找个解析 elf 的工具或者库,找到对应指令的二进制格式。

因此,本文要介绍的就是第三步这个工具:
https://github.com/horsicq/XELFViewer
从这里可以下载 mac 版本: https://github.com/horsicq/XELFViewer/releases/download/0.05/xelfviewer_mac_0.05.pkg

安装后运行,然后在菜单中选择对应的 elf 文件即可:

  1. 在菜单中选择 elf 文件
  2. Disasm 中可以看到反汇编的信息
  3. 找到 gcc 内置函数对应的汇编指令
  4. 对应的位置就是十六进制的指令格式了

寄存器对的上的话,应该就能把这个代码复制到 golang plan9 汇编中使用了。

标签:文件,avx,编译,elf,指令流,指令,汇编
From: https://www.cnblogs.com/ahfuzhang/p/17808667.html

相关文章

  • 范围适配器的编译时大小
    与标准不同,think-cell的范围库已经原生支持编译时大小,因此我渴望尝试那里的习惯用法,看看它在实践中的效果如何。 namespacetc{ template<typenameRng> constexprautosize(Rng&&rng);//runtime-sizeofarange,likestd::ranges::size template<typename......
  • 预编译语句Prepared Statements,俗称动态sql
    --创建临时表用动态sql创建set@sqls=concat('createtemporarytable',`temptableTableName`,'(variablevarchar(200),variableValuevarchar(200),variableDatevarchar(50))');preparestmt1from@sqls;#准备好sql语句executestmt1;......
  • windows10编译scrcpy
    一、概述简介:Scrcpy是一款小巧的Android投屏软件,能够跨平台其支持Windows、Mac、Linux系统。右PC充当客户端,Android板子作为服务端。原理:Android将录屏发送给PC,PC接收到数据后进行展示。PC上鼠标点击录屏上对应的坐标,把坐标通过Socket通信传递给Android端,实现对Android......
  • zabbix安装完成后查看编译参数
    最近学习zabbix分布式监控系统,突然想如何查看自己编译时的参数,最终找到自己想要的结果。 1.首先进入zabbix源码目录2.用ls-l命令查看是否有一个叫config.log文件3.这个文件里面有当时编译安装的所选择的参数,但是。。。这个日志里面有上万行,怎么办呢4.这时就可以用到我......
  • nginx coturn socat privoxy opencv 静态编译
    文档说明:只记录关键的地方;发文时间:2023-11-02意义:linux环境,免安装下载后即可使用环境:alpine:3.18dockerclang状态:完善中体验编译结果nginx静态编译关键点nginxusePCRE2libraryonnginx1.21.5hg脚本全称是mercurialopensslzlibpcpre2等静态库......
  • yum安装nginx-源码编译安装nginx
    #nginx官网http://nginx.org/#nginx主要代理七层协议,也就是应用层;nginx是一个高性能HTTP和反向代理,负载均衡服务器.............#nginx默认端口是80#https默认端口是443#官网查看安装步骤http://nginx.org/——>documentation——>Installingnginx——>InstallationonLinux,pac......
  • DiscuzQ官方最新v3.0.220211源码编译搭建教程和官方部署教程,适合二开(已本地编译通过,无
    经过长达半个月的研究!完成这篇DiscuzQ官方最新版本v3.0.220211的源码编译和官方部署教程。适合喜欢二次开发的小伙伴们,已经通过本地编译测试,保证没有任何错误。具体教程在我搭建的dzq(使用二开方法搭建)发布的文章:https://www.abyssdawn.com/thread/4......
  • vscode编译多文件后运行的配置
    在.vscode文件夹下创建launch.json并添加以下内容后,再把编译器地址修改成自己本地的即可{//使用IntelliSense了解相关属性。//悬停以查看现有属性的描述。//欲了解更多信息,请访问:https://go.microsoft.com/fwlink/?linkid=830387"version":"0.2.0","co......
  • Idea编译/运行Java程序慢
    修改前:修改后:参考:https://www.jjput.com/archives/macbookpro14m1mavenslowcompilation问题JDK尽量不要换版本classlombok.javac.apt.LombokProcessor(inunnamedmodule@0x267d00eb)cannotaccessclasscom.sun.tools.javac.processing.JavacProcessingEnvi......
  • 将.View.dll文件反编译出来的*Views*.cs文件转换成.cshtml
    先使用反编译工具将.View.dll文件反编译放入文件夹,然后将文件夹整体复制进\src\viewcs2cshtml\viewcs2cshtml\bin\Debug\net6.0\viewcs复制完成之后运行程序,即可在复制进去的文件夹中看到Views/Areas文件夹暂不支持有asp-开头属性的控件例子还原前usingSystem;usingSystem......