由于我们现在所搭建的系统是基于分布式的系统,出于性能考虑决定基于RPC技术进行系统间的互操作与互通信。团队内在使用一个已被封装的RPC工具包,为什么称它为工具包呢?因为它要生成两个头文件和两个库文件,其实它还会生成一些监时文件,只不过在它在生成静态库时就会把这些临时文件删除。这里逐个介绍它的战果,头文件就是接口方法的声明和编译控制选项,这里要谈的是它的静态库文件,它是由idl生成的代理文件和存根文件并由再加入内存的分配和释放的两个函数及必要的入口函数来生成。为什么这样说?首先可以通过编译时出现的提示串。其次反汇编该文件。
于我尝试用该框架做一个helloworld,其间我经历了几次沮丧或者近乎冒火。静下心来,仔细分析。首先查看服务端已开启了侦听,发现客户端也已经发送,服务端也已到达,但就是没有达到服务函数。最后问题定位在权限问,其实这个问题在我前面的博文中也已经详谈了。解决办法:去除服务端对RPC的限制,其次反汇编该工具后发现了是服务端注册接口函数,解决办法在前面的博文中也已详述,静态hook也成,动态hook的方法也成。当前就用了第一种方法,最好的办法还是不用它,而重新写一个了。
这个工具虽然让我花了近一天来反汇编它,最后却发现都是封装的。但是其中的封装的思想却是值得借鉴的。这样减轻一般用户的使用难度,而且也搞得玄了些。哈哈,就怕我不晕。