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