反编译so库激活成功教程so

反编译so库激活成功教程so所需工具1.IDA_Pro_v6.8_and_Hex-Rays_Decompiler_2.WinHex3.ARM_ASM背景:I2C通讯时报logCameraHal_Marvin:HAL-MOCKUP:HalReadI2CMem(1578):bus_num(7)orreg_addr_size(1)isinvalidateCameraHal_Marvin:…

大家好,又见面了,我是你们的朋友全栈君。

所需工具

1.IDA_Pro_v6.8_and_Hex-Rays_Decompiler_

2.WinHex

3.ARM_ASM

 

背景:I2C通讯时报log  CameraHal_Marvin: HAL-MOCKUP: HalReadI2CMem(1578): bus_num(7) or reg_addr_size(1) is invalidate

CameraHal_Marvin: OV2735: Sensor_IsiCheckSensorConnectionIss RevId = 0x00002735, value = 0x00000000 result = 13 
CameraHal_Marvin: CAM_API_CAMENGINE: openSensor (IsiCheckSensorConnectionIss failed)

13代表无效的参数,我自己写一个I2C的读函数,读同样的寄存器是成功,所以怀疑so文件对I2C NUM大小做了判断,认为I2C7是无效的。所以想激活成功教程so,将对i2c num 的大小改大点。

 

基础知识:

(1)了解反编译成汇编后的结构,以及常用的汇编指令的意义

https://bbs.ichunqiu.com/thread-41629-1-1.html?from=sec

(2)实战预热

https://blog.csdn.net/m0_37766442/article/details/72903385

 

一、反编译so

使用IDA打开so

 

 

反编译so库激活成功教程so

 

根据log信息或猜测查找需要激活成功教程的大致位置

如我需要搜索的log:bus_num(7) or reg_addr_size(1)

我们就搜索reg_addr_size这个字符串

反编译so库激活成功教程so

 

反编译so库激活成功教程so

 

反编译so库激活成功教程so

 

我们找到了一处符合的字符串,双击上面的DATA_REF后的内容跳转到引用的代码段

反编译so库激活成功教程so

 

代码段

反编译so库激活成功教程so

 

根据我们的推测,如果对I2C num做判断肯定会使用if语句做比较,在汇编里也就是CMP指令,然后BLT或BL 、BGT进行跳转

我们看到打印这一段log的过程中没有CMP 和BL,所以很有可能这是if里面的内容,CMP在其他地方。我们看到上方有一个

loc_82036,这代表一段代码的标签处,类似C里面goto 的标签,那肯定其他地方会向这个标签做跳转

选中这个标签,右击

反编译so库激活成功教程so

点击红框选项,就会列出所有向此处跳转的地方,这个so,也就在其上面,已经高亮了

反编译so库激活成功教程so

我们看到有两个地方向此处跳转,也都有CMP语句和BL,应该没错了,大致分析下

CMP R0,#6            R0寄存器与立即数6做比较,大于6跳转到loc_82036

下面一个是大于等于5跳转到loc_82036

此处我们以大于6跳转为例说明如何激活成功教程,实际中可以结合函数参数个数等其他可能的原因猜测,排除一些跳转项,实在无法排除就一个一个试。

点中CMP R0,#6的地址处,然后切换到HEX View

反编译so库激活成功教程so

反编译so库激活成功教程so

Hex VIEW 可以切换数据格式,64位so用4字节格式,32位so用2字节格式

反编译so库激活成功教程so

 

我们需要将CMP R0,#6  改成CMP R0,#8试一试

打开arm_asm工具,输入CMP R0,#6 ,   GO

反编译so库激活成功教程so

可以看到这条指令对应的2字节16进制是0628

看IDA里的值 也是2806  应该是大小端的问题,不影响,我们修改时注意下就可以

反编译so库激活成功教程so

看这条指令的物理地址,以便在winhex内修改

反编译so库激活成功教程so

是80026,使用winhex打开这个so,跳转到这一地址

反编译so库激活成功教程so

我们将06改成08保存

反编译so库激活成功教程so

替换so,不再打印那个错误log,读正常了,但是写还有问题,同样的方法修改I2C写操作里的值,问题解决

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149366.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MATLAB分段函数及应用实例

    MATLAB分段函数及应用实例简单实例:用matlab画分段函数        当x<0时 y=5*sin(x);        当x>=0且x<=5时y=x^2;        当x>5时y=(8-x)^2+16.x=-5:0.001:10;y=5*sin(x).*(x<0)+x.^2.*(x>=0&x<=5)+((8-x).^2+16).*(x>5);p…

    2022年6月7日
    42
  • Java Bean 简介及其应用

    Java Bean 简介及其应用Bean的中文含义是“豆子”,顾名思义JavaBean是一段Java小程序。JavaBean实际上是指一种特殊的Java类,它通常用来实现一些比较常用的简单功能,并可以很容易的被重用或者是插入其他应用程序中去。所有遵循一定编程原则的Java类都可以被称作JavaBean。 一.JavaBean技术概述       JavaBean是基于Java的组件模型,由属性、方法和事件3部

    2022年7月8日
    19
  • 轻松理解转置卷积(transposed convolution)或反卷积(deconvolution)「建议收藏」

    轻松理解转置卷积(transposed convolution)或反卷积(deconvolution)「建议收藏」原文地址:Up-samplingwithTransposedConvolution本文暂时没有插入图像,以后修订在CNN中,转置卷积是一种上采样(up-sampling)的方法.如果你对转置卷积感到困惑,那么就来读读这篇文章吧.本文的notebook代码在Github.上采样的需要在我们使用神经网络的过程中,我们经常需要上采样(up-sampling)来提高低…

    2022年6月21日
    19
  • 修改win10 ntp服务器地址,修改win10 ntp服务器地址

    修改win10 ntp服务器地址,修改win10 ntp服务器地址修改win10ntp服务器地址内容精选换一换用户可以配置、修改和查看系统时区及NTP服务器相关信息。目前只支持使用操作系统为Linux的外部NTP服务器。以NTP服务器、DNS服务器的操作系统均为SUSE为例:登录Linux弹性云服务器。执行以下命令,切换至root用户。sudosu-sudosu-执行以下命令,编辑ntp.conf文件。vim/etc/ntp.confvim/et…

    2022年6月12日
    111
  • python爬虫与数据可视化书(python大数据可视化)

    之前写过篇爬取前程无忧职位信息并保存到Excel的博客,这里仔细的讲讲并且增加可视化内容文章目录1.数据挖掘2.数据清洗3.数据可视化这里特别强调,pyecharts包千万别装新版的,我这里装的是0.5.9版的其次如果要做地理坐标图,热力图啥的,必须安装地图包,比如世界地图包,中国地图包,城市地图包啥的1.数据挖掘代码所需包#-*-coding:utf-8-*-importur…

    2022年4月13日
    34
  • 规范化理论:多值依赖的理解_依赖关联泛化实现

    规范化理论:多值依赖的理解_依赖关联泛化实现多值依赖的定义我们用一个例子来引出多值依赖(MultivaluedDependency,MVD)的含义。假设学校中一门课程可由多名教师讲授,教学中他们使用相同的一套参考书,这样我们可用下图的非规范化的关系来表示课程C、教师T和参考书B间的关系。关系CTB如果关系CIB转化成规范化的关系,如图所示。规范后的关系CTB由此可以看出,规范后的关系模式…

    2022年10月25日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号