首页
社区
课程
招聘
[讨论]无名侠 发表的模拟执行so的github项目
发表于: 2019-10-19 19:46 8036

[讨论]无名侠 发表的模拟执行so的github项目

2019-10-19 19:46
8036
原帖链接: https://bbs.pediy.com/thread-253868.htm.谈谈如何使用的心得体会。
首先安装环境这一步,相信有一步麻烦了很多人。其中最繁琐但是不必要的依赖,就是keystone,这款工具在emu中是用来生成符号中断跳转的
代码的,就这一处用到。但是只需要硬编码就行。没错,只需要硬编码。因为跳转指令模板只有中断号不同,如果修改一下
使用硬编码去掉这个依赖性,我相信很多人安装emu就不会这么痛苦了。 
第二点,jvm虚拟机模块, 对class和对象实例,没有做进一步的区分处理。也就是如果代码使用了class类型作为参数,不是类的实例,可能不正确。
另外,没有处理静态成员和实例成员的区分,反正我没找到示例,也没看到相关代码。这一块大概需要根据使用者的要求自行调整代码。
第三点,实际使用emu过程中,最主要的是如何构造各种各样奇怪的输入输出参数,比如context等等。构造后如何声明该方法(第一步该是注册),
才能被native层正确的回调。
    原作者没有实现一个比较常见的符号调用memcpy,memcpy 不过程序自己有默认的实现 。另外timegettime没有实现获取系统真实时间,
只实现了获取相对时间。这里先提一下如何自己构造未实现的符号调用或者syscall。符号调用和系统调用出错提示不同。符号调用出错,会导致程序跑偏了,
因为该处代码并没有实现,所以往往跑到不知道的地方就结束了。这个问题并不好判断,因为如果程序出现其他异常,也会跑偏了,
所以只能老老实实的从头到尾看日志(当然是从最近的日志看起)而系统调用会显示的抛出一个异常,异常会给出中断号,提示该中断号未实现。 


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2019-10-21 13:21 被zylyy编辑 ,原因: 继续写
收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 3134
活跃值: (1222)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
2
一楼。。。
2019-10-19 19:55
0
雪    币: 1385
活跃值: (5609)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
3
C#版本地址呢。大佬
2019-10-19 22:14
1
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
给大家截个图
2019-10-21 10:34
0
雪    币: 2282
活跃值: (3828)
能力值: ( LV6,RANK:81 )
在线值:
发帖
回帖
粉丝
5
嗯,传各种class的时候就太难了
2019-10-24 15:46
0
雪    币: 268
活跃值: (11)
能力值: ( LV3,RANK:21 )
在线值:
发帖
回帖
粉丝
6
ks = Ks(KS_ARCH_ARM64, KS_MODE_LITTLE_ENDIAN)
你说的硬编码是这段吗,可是这里调用了Ks()函数实例化,硬编码 KS_ARCH_ARM64、 KS_MODE_LITTLE_ENDIAN也不能让程序跑通吧?
最后于 2019-12-4 16:36 被IwanchorwI编辑 ,原因: 没打完就发出去了
2019-12-4 16:34
0
雪    币: 144
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
IwanchorwI ks = Ks(KS_ARCH_ARM64, KS_MODE_LITTLE_ENDIAN)你说的硬编码是这段吗,可是这里调用了Ks()函数实例化, ...
不需要这个模块。因为跳转指令类似于x86得jump,开头是e9 字节,后面构造一个常量即可
2019-12-5 00:59
0
雪    币: 158
活跃值: (1111)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
在利用emulator调用so的导出函数时,传入参数后,为什么logging并不会像视频那样输出参数DEBUG信息,最后返回的时候也是none,我的提问地址在:https://www.kanxue.com/question-read-806574.htm
2022-3-3 16:54
0
游客
登录 | 注册 方可回帖
返回
//