houdini是谷歌闭源的一个项目,没有源码,网络上面的分析文章我也只是用AI找到了一篇文稿,介绍的也是很专业,分析houdini的虚拟机,翻译的过程
houdini翻译arm指令到intel的也能运行的一个项目,也就是说可以对houdini做一些修改拦截,就能实现arm程序的修改
houdini的分析主要就是分析出虚拟机的代码分发,以及上下文切换,等等,内存分布
我在分析的过程中没有太多的捋顺的分析,而是采用函数功能判断,可能不是很准确,但是大差不差,至少功能是正确
首先是通过获取trampoline的函数,定位到了实际的翻译函数,这样就能知道是那个arm指令的内存被执行了,然后如果一直往下跟的话,很难跟到真实的虚拟机分发,于是我就直接注入了一个so,在so里面做了这样一些事情
这样程序就会崩溃,就可以找到houdini的函数调用
在这里就能获取到arm函数执行的参数,堆栈寄存器这些数据
在往会返回就可以找到真实的分发函数
这里就有数组的运算,就翻译后的x86处理函数
还有就是javavm,每一个java程序都有一个javavm虚拟机对象,这个对象用来获取当前java虚拟机的一些状态,arm也会有一个自己的javavm对象,这个对象也是可以在异常断下的函数的houdini虚拟栈中获取到
没有实际进行调试演示,还请见谅,有什么疑问可以联系我,感觉我讲的这么简单能看明白不会有疑问找我的吧,严谨一点的话,应该把内存布局截图的,我是个烂人



