美文网首页
汇编语言在ARMv7上的使用(还有NEON编程)

汇编语言在ARMv7上的使用(还有NEON编程)

作者: 有么有WiFi | 来源:发表于2018-02-07 15:56 被阅读0次

这是好好的嵌入式的心得,才不是破解游戏时候做的呢。

unity出了一个il2cpp,把关键代码放到了so里面,这个so还是不能用ida直接分析的。网上有大神就写了能直接dump出来一个神奇脚本小程序(具体链接是:https://www.perfare.net/659.html),这个dumper已经到了latest build(我就当他是一个版本号了),auto都十分强大,大家可以去大神博客下载。

dump出来一个cs文件和一个py脚本,cs文件可以看各种函数名,py脚本是加载到ida里面的(加载上它又分析了一宿)。然后正常情况下能不能f5就看脸了,不能就改汇编,顺便再推荐一个网站http://armconverter.com/,能看汇编指令的机器码。在二进制编辑器里面直接改就成了。

这次这个就神奇了,好多即使是能f5看,看到的也有好多汇编语言翻译不过来,大多数都是指令前面带个v,网上一查原来是neon指令。有关neon指令的官方文档还请看arm官网(http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204ic/Cjaihjec.html)这个网站卡的怪怪的,但是能下载下来PDF,推荐看PDF。

东西就介绍这么多,下面就是修改了,修改无非就是两种:改正负号、直接返回一个我们需要的数。改正负号,或者说把减改成加,看着简单一点,但是在没有反编译的时候就怕找到错误的地方。于是我这次选择了返回一个值。定位修改的函数的返回值是一个double,我一开始还天真的以为double就是两个int合起来,因为明显返回的是R0,R1两个寄存器,我只改一个的话,改高位就行。但是事实上double是浮点数(我说的那个叫long int),然后又查了浮点数的二进制表示手法,大致就是分符号位,阶码和尾数,double是64位双精度的,分别占了1,11,52位。

返回值的前一条指令是一个vmov,把一个S寄存器里面的值赋给R0,R1,NEON指令中的vmov是可以使用浮点立即数的,我一开始想对S寄存器赋值,但是弄了半天没弄好,文档里面也写得模模糊糊。然后又把一部分指令nop掉,因为so修改不能加减指令,好多都是算偏移的,结果毫无疑问的崩了。最后还是打算对R0使用mov指令,寄存器里面的值就是值而已,浮点数控制大小的还是最前面的几位。用十六进制查看器找一个合适的数字准备输进去,这一步有两点注意的,首先,数字一定是“合适”的大小,有一次不知道哪改不对了,游戏里显示的都是NaN;然后十六进制查看器是看文件的十六进制,里面高位和地位是反着的。

mov的时候又发现了问题,因为mov输入立即数只能输0到65536。其实是控制不到R寄存器的高位的,但是后面有发现有灵活的第二操作数,能让8位的常数以各种移动mov进去,最后只控制了最高的8位,输出了一个迷一般的浮点数。

多看官方文档,可能没有教程详细,但是有许多网上教程没有的东西。

相关文章

  • 汇编语言在ARMv7上的使用(还有NEON编程)

    这是好好的嵌入式的心得,才不是破解游戏时候做的呢。 unity出了一个il2cpp,把关键代码放到了so里面,这个...

  • 反射机制及其在iOS中的应用

    最古老的计算机编程使用母语汇编语言,它本质上是反射的,因为这些原始的架构可以通过定义指令作为数据,并使用自修改代码...

  • GNU C内嵌汇编语言

    大部分的移动端深度学习框架都会使用到neon优化对深度算法的算子进行优化,有些使用了Neon Instructio...

  • linux学习 Day12-bash编程 变量

    编程语言:机器语言,汇编语言,高级语言 一 动态语言与静态语言 静态语言:编译型语言 强类型(变量):变量在使用前...

  • 汇编语言之基础

    本系列为学习<汇编语言> 王爽版 的学习笔记 [TOC] 汇编语言是什么? 汇编语言是直接在硬件之上工作的编程语言...

  • 2017年书单

    《汇编语言》 《TCP/IP详解 卷1:协议》 《python核心编程》

  • 利用Runtime和函数响应式编程自己实现OC的KVO

    前面我们在使用Block的时候提到了函数式编程和链式调用的用法,但是实际上Block还有一种编程思想,就是响应式编...

  • 嵌入式程序优化(3)——neon内建函数讲解

    1. neon intrinsics介绍 neon intrinsics 是官方提供的 neon内建函数,使开发者...

  • iOS汇编研究-1-初识汇编

    一、什么是汇编语言 人类操作计算的能力需要使用一种方式来表达、需要使用一种方式来实现。目前,都是通过编程来实现的,...

  • 编写完整的汇编程序

    第一个完整的汇编程序 前面的实验都是利用Debug程序进行模拟测试的,并没有编写一个完整的汇编程序 使用汇编语言编...

网友评论

      本文标题:汇编语言在ARMv7上的使用(还有NEON编程)

      本文链接:https://www.haomeiwen.com/subject/dfyozxtx.html