代码改变世界

php内核分析(八)-zend_compile

2016-12-05 10:39 by 轩脉刃, 91 阅读, 收藏, 编辑
正文内容加载中...

Golang汇编命令解读

2016-12-05 10:12 by 轩脉刃, 427 阅读, 收藏, 编辑
摘要: 我们可以很容易将一个golang程序转变成汇编语言。 比如我写了一个main.go: 使用命令: 我们就获取了main.S是main.go的汇编版本。 首先这个程序根据TEXT是定义函数的,分为3个部分 这个"". 代表的是这个函数的命名空间。 g(SB) 这里就有个SB的伪寄存器。全名未Stati阅读全文

php内核分析(七)-扩展

2016-12-01 10:16 by 轩脉刃, 221 阅读, 收藏, 编辑
摘要: 这里阅读的php版本为PHP 7.1.0 RC3,阅读代码的平台为linux。 我们研究下反射这个扩展。 反射这个扩展目录是存在在:ext/reflection。其实里面的代码很简单。一个.h文件,一个 .c文件。 我们先看下.c文件中,会看到很多ZEND_METHOD 对应的宏: 这里的 代表的是阅读全文

php内核分析(六)-opcode

2016-11-29 10:44 by 轩脉刃, 350 阅读, 收藏, 编辑
摘要: 这里阅读的php版本为PHP 7.1.0 RC3,阅读代码的平台为linux 查看opcode php是先把源码解析成opcode,然后再把opcode传递给zend_vm进行执行的。 在php7中,我们能很方便用phpdbg来查看一个文件或者一个函数的opcode了。至于phpdbg的使用,现在网阅读全文

php内核分析(五)-zval

2016-11-28 10:24 by 轩脉刃, 331 阅读, 收藏, 编辑
摘要: 这里阅读的php版本为PHP 7.1.0 RC3,阅读代码的平台为linux 实际上,从这个函数开始,就已经进入到了zend引擎的范围了。 实际上是调用Zend/zend_execute_API.c 再进去是调用 这里的retval_ptr为NULL,string_name为"Command lin阅读全文

php内核分析(四)-do_cli

2016-11-25 11:47 by 轩脉刃, 120 阅读, 收藏, 编辑
摘要: 这里阅读的php版本为PHP 7.1.0 RC3,阅读代码的平台为linux # main 把剩下的代码增加了下注释全部贴出来了(这个是简化后的main函数,去掉了一些无关紧要的代码段): 其实看伪码很简单: 好了,其实看了一圈,里面最重的函数是do_cli了。 php参数 do_cli里面你会看到阅读全文

php内核分析(三)-全局变量

2016-11-24 15:17 by 轩脉刃, 100 阅读, 收藏, 编辑
摘要: 这里阅读的php版本为PHP 7.1.0 RC3,阅读代码的平台为linux CG CG是从全局的compiler_global中获取属性值,里面存储的就是编译过程使用到的全局变量。 SG EG EG是从executor_globals中获取变量阅读全文

php内核分析(二)-ZTS和zend_try

2016-11-23 10:29 by 轩脉刃, 272 阅读, 收藏, 编辑
摘要: 这里阅读的php版本为PHP 7.1.0 RC3,阅读代码的平台为linux ZTS 我们会看到文章中有很多地方是: 这里的ZTS是个什么概念呢。我们经常使用的php都是运行在单进程,单线程环境,比如cgi,都是一个请求进来,就一个进程为它服务,当请求结束了,进程也就结束了。所以比如像全局变量,ph阅读全文

php内核分析(一)-sapi_module_struct

2016-11-21 11:56 by 轩脉刃, 409 阅读, 收藏, 编辑
摘要: 这里阅读的php版本为PHP 7.1.0 RC3,阅读代码的平台为linux 首先是寻找php的入口,php有很多种模式,apache,php fpm, cli模式,我要入手的话,只能先从最简单的cli模型开始。 那么,我需要先寻找 这个命令是如何执行的。 首先还是寻找main入口,由于我们看的是命阅读全文

go-hbase的Scan模型源码分析

2016-11-18 10:35 by 轩脉刃, 198 阅读, 收藏, 编辑
摘要: git地址在这里: https://github.com/Lazyshot/go hbase 这是一个使用go操作hbase的行为。 分析scan行为 如何使用scan看下面这个例子,伪代码如下: 首先是NewClient, 返回的结构是hbase.Client, 这个结构代表的是与hbase服务端阅读全文