反编译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写操作里的值,问题解决

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • h5页面 请在微信客户端打开链接_使用Fiddler抓包解决“请在微信客户端打开链接”的问题…

    h5页面 请在微信客户端打开链接_使用Fiddler抓包解决“请在微信客户端打开链接”的问题…如何看一个微信小项目的H5源代码,我想大家通用的方式就是在微信里面打开H5,然后点击右上角的复制链接,然后把链接放到PC端浏览器里面查看源代码,但是有很多做了微信授权的H5会提示,如下图做过微信授权开发的朋友都知道,遇到这个页面就算再怎么复制链接都不行了,以前还能在PC端的微信里面直接点链接可以查看代码,貌似现在也被微信封了,但是别人好的代码我们是需要学习交流的,怎么办呢?在网上查了一些资料,发现…

  • 分享几个IP获取地理位置的API接口(最全面的了)

    分享几个IP获取地理位置的API接口(最全面的了)

  • 如何刷原生android系统版本,小米手机1原生Android4.1系统刷机教程

    如何刷原生android系统版本,小米手机1原生Android4.1系统刷机教程《小米手机1原生Android4.1系统刷机教程》由会员分享,可在线阅读,更多相关《小米手机1原生Android4.1系统刷机教程(4页珍藏版)》请在人人文库网上搜索。1、小米手机1原生Android4.1系统刷机教程各位亲爱的米粉:小米手机1原生Android4.1系统已经正式公测,小米手机1、小米手机1s及小米手机1S青春版均可升级。您可以通过卡刷与线刷两种方式升级至Androi…

  • MySql添加索引的五种方法

    MySql添加索引的五种方法1.添加primarykey(主键索引)altertable表名称addprimarykey(列名);2.添加unique(唯一索引)altertable表名称addunique(列名);3.添加index(普通索引)altertable表名称addindex索引名(index_name)(列名);4.添加fulltext(全文索引)altertable表名称addfulltext(列…

  • FileInputStream的available方法

    FileInputStream的available方法available():返回与之关联的文件的字节数importjava.io.File;importjava.io.FileInputStream;importjava.io.IOException;publicclassFileInputStreamDemo2{ publicstaticvoidmain(String[]args)throwsIOE…

  • ConcurrentModificationException异常解决办法

    1、在开发自己的第一款app,在操作存放子弹的ArrayList时,报出java.util.ConcurrentModificationException异常,因为该异常是非捕获型异常而且很少见,所以费了些时间才找到问题所在.查询了很多资料,终于调通了.原代码是这样的,synchronized(mCowBoys){ for(CowBoySprite cowBoy: mCowBoys)

发表回复

您的电子邮箱地址不会被公开。

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