首页
社区
课程
招聘
[求助]关于修改so文件中BL的跳转的问题。。
发表于: 2017-2-28 23:31 4121

[求助]关于修改so文件中BL的跳转的问题。。

2017-2-28 23:31
4121

(ノд`)新人第一次发帖。。查了很多次胡乱修改了很多次,求大牛大佬指教一下。。。

  MasterCharacterProfile prof = Enumerable.FirstOrDefault<MasterCharacterProfile>(BaseDataManager<MasterDataManager>.Instance.GetDataObject<MasterCharacterProfileList>(), new Func<MasterCharacterProfile, bool>(storey.<>m__69A));
  PlayerCharacter character = Enumerable.FirstOrDefault<PlayerCharacter>(SingletonBehaviour<OmakeController>.Instance.playerCharacterList, new Func<PlayerCharacter, bool>(storey.<>m__69B));

这是某游戏在更换内核使用il2cpp之前的源代码,现在换成了il2cpp,我是个什么都不懂的菜鸡(ノд`)。。

猜这对象创建应该是用的BL跳转到sub_xxxxxx的地方创建的,我想把这两个对象修改的一模一样,就是把PlayerCharacter类的character对象变成MasterCharacterProfile类的对象,如果是更换内核前

我只要把这段IL代码删除然后把上面那段创建MasterCharacterProfile类的对象的IL代码直接复制下来再在Variables里修改一下就成,但是现在换成了il2cpp

瞎猜测这个sub_104B07C和这个sub_C2C414分别是创建对象的。。然后我修改了函数特征码(?)

但是结果上面一个BL指令并没有跳转到sub_C2C414,而是跳转到了另外一个函数。。是我的方法错误吗,求大牛大佬们指教一下菜鸡。。

是用UE修改的HEX值。。。修改他们的hex值一样但是他们跳转到的地方确不一样

(ノд`)菜鸡我弄了几个礼拜查了很多也没有查到相关的修改教程。。求指导。。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 222
活跃值: (72)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
BL是带保存lr寄存器的跳转指令,B指令跳转。既然是跳转指令后面跟的是跳过去的字节个数。起跳位置不一样的,你改成一样的代码自然跳到的目的地不一样了。
2017-3-1 08:58
0
雪    币: 18
活跃值: (561)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
去看arm指令手册,你需要根据相对偏移,计算得到opcode
2017-3-1 09:19
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
IceExt BL是带保存lr寄存器的跳转指令,B指令跳转。既然是跳转指令后面跟的是跳过去的字节个数。起跳位置不一样的,你改成一样的代码自然跳到的目的地不一样了。
<(‵□′)/了解!我再多研究一下 (‘;ω;´) 如果再遇到问题我还是会厚颜无耻的过来问下你们。。。
2017-3-1 10:05
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
ele7enxxh 去看arm指令手册,你需要根据相对偏移,计算得到opcode
好!谢谢啦!我去看看!
2017-3-1 10:05
0
雪    币: 1096
活跃值: (349)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
6
IDA Options -> General -> Disassembly -> Number of opcode bytes 里面的参数填写上大于0的数,如4 主要是为了在IDA-View页面同时能看到汇编和Hex,如果单条指令长度为4个,则是arm指令集;如果是2、4混合则是thumb、thumb2指令集。 这2种指令集的BL修改计算方式不一样,目测你提供的Hex-View是arm指令集。 论坛上无论arm还是thumb版本的BL计算都能检索到相关的帖子
2017-3-1 10:28
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
lscmxl IDA Options -> General -> Disassembly -> Number of opcode bytes 里面的参数填写上大于0的数,如4 主要是为了在I ...
好。。那是我搜索的力度不够,(‘;ω;´) 谢谢提醒
2017-3-1 10:41
0
雪    币: 46
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
c8 df 03 eb
2017-3-2 17:49
0
游客
登录 | 注册 方可回帖
返回
//