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

我的微信公众号:“码农UP2U”
 

分享学习 PHP 源码的方法的更多相关文章

  1. 框架源码系列五:学习源码的方法(学习源码的目的、 学习源码的方法、Eclipse里面查看源码的常用快捷键和方法)

    一. 学习源码的目的 1. 为了扩展和调优:掌握框架的工作流程和原理 2. 为了提升自己的编程技能:学习他人的设计思想.编程技巧 二. 学习源码的方法 方法一: 1)掌握研究的对象和研究对象的核心概念 ...

  2. 【菜鸟学习jquery源码】数据缓存与data()

    前言 最近比较烦,深圳的工作还没着落,论文不想弄,烦.....今天看了下jquery的数据缓存的代码,参考着Aaron的源码分析,自己有点理解了,和大家分享下.以后也打算把自己的jquery的学习心得 ...

  3. Linux内核源码分析方法

    一.内核源码之我见 Linux内核代码的庞大令不少人“望而生畏”,也正因为如此,使得人们对Linux的了解仅处于泛泛的层次.如果想透析Linux,深入操作系统的本质,阅读内核源码是最有效的途径.我们都 ...

  4. 【转】Linux内核源码分析方法

    一.内核源码之我见 Linux内核代码的庞大令不少人“望而生畏”,也正因为如此,使得人们对Linux的了解仅处于泛泛的层次.如果想透析Linux,深入操作系统的本质,阅读内核源码是最有效的途径.我们都 ...

  5. Linux内核源码分析方法_转

    Linux内核源码分析方法 转自:http://www.cnblogs.com/fanzhidongyzby/archive/2013/03/20/2970624.html 一.内核源码之我见 Lin ...

  6. DotNetty网络通信框架学习之源码分析

    DotNetty网络通信框架学习之源码分析 有关DotNetty框架,网上的详细资料不是很多,有不多的几个博友做了简单的介绍,也没有做深入的探究,我也根据源码中提供的demo做一下记录,方便后期查阅. ...

  7. 学习 vue 源码 -- 响应式原理

    概述 由于刚开始学习 vue 源码,而且水平有限,有理解或表述的不对的地方,还请不吝指教. vue 主要通过 Watcher.Dep 和 Observer 三个类来实现响应式视图.另外还有一个 sch ...

  8. Linux学习之源码包安装与脚本安装(十八)

    Linux学习之源码包安装与脚本安装 目录 源码包与RPM包的区别 源码包安装 脚本安装 源码包与RPM包的区别 1.区别 安装之前的区别:概念上的区别 安装之后的区别:安装位置不同 源码包: 开源的 ...

  9. 调试JDK1.8源码的方法

    背景 在学习JDK源码的时候,免不了需要调试JDK的源码. 比如:想理解ConcurrentHashMap的put(K k, V v)方法,JDK自带的rt.jar文件是支持断点调试,但是却看不到变量 ...

随机推荐

  1. intellij cpu占有高解决办法(亲测有效!)

    File---Settings---Inspections---把勾都去掉或者选自己需要的部分.

  2. Linux Bash之通配符

    通配符是我们在shell环境中不知不觉中都会用到的,有时甚至都不会考虑到去探究其实现过程,因为使用得太普遍了.而清晰地理解每一个过程,将有助于我们的分析和调试. 说白了,通配符就是在 shell 环境 ...

  3. javascript数据结构

    学习数据结构非常重要.首要原因是数据结构和算法可以很高效的解决常见问题.作为前端,通过javascript学习数据结构和算法要比学习java和c版本容易的多. 在讲数据结构之前我们先了解一下ES6的一 ...

  4. cmake常用命令总结

    最近研究了下cmake,总结了一些常用命令,方便以后快速查找. project(projectname [CXX] [C] [Java]): 设置工程名. set(VAR [VALUE] [CACHE ...

  5. 物联网基础组件IoTClient开发系列

    系列目录 IoTClient开发1 - 你也可以写个聊天程序 IoTClient开发2 - 你也可以写个服务器 IoTClient开发3 - ModBusTcp协议客户端实现 IoTClient开发4 ...

  6. python连接数据库使用SQLAlchemy

    参考python核心编程 ORM(Object Relational Mapper),如果你是一个更愿意操作Python对象而不是SQL查询的程序员,并且仍然希望使用关系型数据库作为你的后端,那么你可 ...

  7. js反爬学习(一)谷歌镜像

    1. url:https://ac.scmor.com/ 2. target:如下链接 3. 过程分析: 3.1 打开chrome调试,进行元素分析.随便定位一个“现在访问” 3.2 链接不是直接挂在 ...

  8. RF之简介

    robot framework 是一个通用型的自动测试框架 - 自动测试用例的实现方式 - 自动测试用例的开发支持 :  IDE.库 - 和用例管理系统的集成 - 测试执行:相关测试套件和测试用例的执 ...

  9. node.js+mysql用户的注册登录验证

    下面代码实现的功能是:用node.js连接mysql实现用户的注册和登录,这里主要实现的是后端的验证代码,前端显示部分没具体写出. 整个程序的流程是这样的: 1.首先建立数据库reji,数据表user ...

  10. Vscode LeetCode 教程

    1: 题目选区 商店安装LeetCode 以后, 选择地球确认选区 2: 选择题目 选择Code Now 进行编码 默认路径为$HOME/.leetcode/ 你可以通过更新配置项 leetcode. ...