天天抽一点时间来看看 PHP 源码方面的书,说实话,没法在调试器下观察 PHP 运行状态的上下文实在是一件痛苦的事情。不过还好不是一无所得,虽然内容比较多,可是掌握方法挨着看下去仍是能够看一些代码的。并且自己 PHP 源码讲解就有书,因此学习起来仍是较为方便的。想要调试源码,我以为我最好应该找一个前一天充分休息而且是阳光明媚的早上来学习关于调试 PHP 源码的知识,那样可能效率会高一些,可是这样的机会好像又很少。
之前学习逆向分析的时候须要看反汇编代码,当时也看得很是的晕,后来看书学习时书中也给出了阅读反汇编的经验。首先把指令进行分类,好比函数调用的指令,流程控制的指令和数据处理的指令等。而后把要进行逆向分析的部分按照指令分类进行标注,阅读的反汇编的时候,遇到函数调用的部分基本比较明显,就是堆栈操做、函数调用等,遇到流程控制的时候把这些反汇编直接根据特征对应到 if、for、while 等相应的控制结构中,而遇到数据处理的部分则须要一行一行的阅读。
其实对应到阅读 PHP 的源码也是相似的吧。
说说我学习 PHP 源码的方法吧。虽然有讲解 PHP 源码方面的书,可是书中的内容在作一些基本的介绍后就开始讲源码了。而 PHP 的底层源码中有很是多的数据结构,并且是 struct 套着 struct。这就致使一个问题,若是底层的数据结构的逻辑整理不清楚,那么在看到代码操做这些数据结构的时候,必然也是晕的。所以,我看书的时候,我会把相关的数据结构按照相似 UML 图的方式整理一下,其实就是画几个图,标记一下所遇到的数据结构,标记数据结构时我会把结构体的名称和几个关键的字段标注好,而且把数据结构之间的关联关系整理出来,这样就会把所涉及的数据结构及数据关系搞明白了,在看代码的时候,把本身整理的数据结构打开对照着看,就不是那么晕了。当代码操做具体数据结构中的字段时,再把具体的字段补充到对应的数据结构中,这样不但 PHP 源码底层的处理逻辑了解了,并且对于底层的数据结构也就有了清晰和全面的掌握了。
这就是个人方法吧,虽然不复杂可是仍是比较有用的。毕竟笨人的办法就是这么的原始和简单!