反编译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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • session、cookie、token 详解

    发展史1、很久很久以前,Web基本上就是文档的浏览而已,既然是浏览,作为服务器,不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议,就是请求加响应,尤其是我不用记住是谁刚刚发了HTTP请求,每个请求对我来说都是全新的。这段时间很嗨皮2、但是随着交互式Web应用的兴起,像在线购物网站,需要登录的网站等等,马上就面临一个问题,那就是要管理会话,…

    2022年4月6日
    54
  • ideaIU-2022.01.13激活码-激活码分享

    (ideaIU-2022.01.13激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html747EFQ8BIF-eyJsa…

    2022年3月31日
    63
  • navicat激活码【注册码】

    navicat激活码【注册码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    63
  • 堆栈callstack打印

    堆栈callstack打印一、适用java1、Log.d(TAG,Log.getStackTraceString(newThrowable()));//在使用Log.d的场合2、newException(“testprintkstack”).printStackTrace();Note:还有其他方法,可以参考网络

    2025年7月26日
    5
  • cefsharp播放视频_flash播放器手机版

    cefsharp播放视频_flash播放器手机版原生CefSharp组件缺少FlashPlayer,实现内置浏览器功能时,不支持播放flash。若想使用flash播放功能,我们需要在初始化CefSharp组件时,加载flash播放插件,并设置支持flash播放。Chrome浏览器内核的flash插件文件为pepflashplayer.dll,将pepflashplayer.dll文件放在程序运行目录下,加载flash插件的C#代码如下:v…

    2025年11月10日
    6
  • Android系统五大布局详解Layout

    Android系统五大布局详解Layout我们知道Android系统应用程序一般是由多个Activity组成,而这些Activity以视图的形式展现在我们面前,视图都是由一个一个的组件构成的。组件就是我们常见的Button、TextEdit等等。那么我们平时看到的Android手机中那些漂亮的界面是怎么显示出来的呢?这就要用到Android的布局管理器了,网上有人比喻的很好:布局好比是建筑里的框架,组件按照布局的要求依次排列,就组成了用于

    2022年5月20日
    40

发表回复

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

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