-
问题背景:
研究的目的主要就是为了深入学习和理解PHP7内核中哈希表实现原理,因为HashTable是PHP内核最重要的一个数据结构,万能的PHP数组以及函数、类等等的内部实现全都离不开HashTable数据结构;此外对于想熟练编写PHP扩展的码友,学习并理解哈希表也是非常重要的。
获取源码:
https://github.com/blogdaren/PHP7HashT...
-
正所谓:水至清则无鱼,人至贱则无敌。
作者平时基本都是沉浸在编码与分享的世界里,很少关注圈里一些开源项目的是是非非,即最近无意间搜索到一片博文,可以说我是气急败坏,该博文作者更是卑鄙无耻、丧心病狂,居然如此作践他人劳动成果:
(1)将 PHPCreeper 改成 CreeperPHP,直接在github公然宣传;
(2)将爬山虎技术文档整体剽窃至看云平台进行公然宣传;
(3)将爬山虎所...
-
爬山虎引擎(PHPCreeper)以及配套爬虫应用框架(PHPCreeper-Application)全面同步发布。
欢迎 Github Star 星星收藏关注。
爬山虎:
基于workerman全新一代多进程异步事件驱动爬虫引擎,致力于让天下没有难爬的数据。
官方地址:
http://www.phpcreeper.com/
爬山虎中文开发文档...
-
PHPForker已收录至workerman官方社区以及Github
欢迎 Github Star 星星收藏关注:
1、https://www.workerman.net/related_projects
2、https://github.com/blogdaren/PHPForker
特别说明:
PHPForker仅是一个供学习研究的实验性...
-
x命令是什么?
x命令即examine命令的别名,用于查看内存地址中的数据。
x命令的格式:
(gdb) x /<n/f/u> <address>
n:表示从当前地址address向后显示n个内存单元的内容,每个内存单元的大小由后面的参数u决定;
f :表示内容输出格式,支持如下格式标识符:
...
-
问题背景:
lea指令是 load effective address 首字母的缩写简称,这有助于加深我们记忆以及理解其语义:用来将一个内存地址直接赋给目的操作数。假设我们采用的汇编风格是ATT风格。
举个例子:
【0x01】mov eax, [ebp-5] 代表将ebp寄存器指向的位置之后的第5个字节处的内存位置(内存地址)里的数据赋值给eax寄存器,即:
1...
-
查看寄存器rip:
(gdb) i r rip
修改寄存器rip:
(gdb) set $rip = 0x400390
注意事项:
与修改变量不同,修改寄存器的值时,需要在寄存器名称前加美元符号$
-
问题背景:
有时候我们提交一个项目后,往往会发现项目下的cache目录一起被纳入了版本控制,这并不是我们想要的,所以如何将cache目录(当然也包括该目录下所有子目录以及文件)脱离版本控制呢?
解决方案:
1、先演习一下看看会发生啥:
# git -r --cached -n /path/to/cache
2、确认无误后下达真实命令:
# git -...
-
问题背景:
有时候GDB调试程序到半路不想调了,只想终止当前正在调试的程序,但是注意并不想退出GDB,怎么办?
解决方案-1:
直接运行 r 命令,让程序重新从头开始运行,此法差强人意;
解决方案-2:
直接执行kill 命令,默认是发送信号量15(SIGTERM)给当前调试进程,默认动作就是退出程序,推荐此法。
-
问题背景:
熟悉的代码会得到如题示的结果: printf("%u\n", (size_t)-1);
预备知识:
http://www.blogdaren.com/post-2615.html
解决方案:
0X01、整数1的二进制如下:
00000000000000000000000000000001
0X02、由于-1是负数,所以二进制的第一位需要取值为1即...
-
问题背景:
在PHP内核的字符串实现源码中我们发现了这么一个结构体如下:
struct _zend_string { ...
-
问题背景:
通过单链表实战学生成绩管理系统,涉及到的知识点比较广泛(仅关注原理、业务逻辑校验细节未关注):
单链表自身、结构体、指针、位操作、趣味宏、堆内存、排序算法等等。
先看效果图:
实现代码:
/*
* ========================================================...
-
问题背景:
GDB调试C程序时,经常需要打印结构体的内容,默认情况下输出很不直观,看起来很费劲,比如:
(gdb) p *ht
$6 = {gc = {refcount = 1, u = {v = {type = 7 '\a', flags = 0 '\000', gc_info = 0}, type_info = 7}}, u = {v = {flags = 18 '\022', ...
-
问题背景:
-8 转换为二进制是多少?
解决方案:
第一步:将 8 转换为二进制得到:
00000000 00000000 00000000 00001000
第二步:由于-8是负数,所以可得其原码为:
10000000 00000000 00000000 00001000
第三步:根据原码继续取其反码从而得到二进...
-
问题背景:
阅读PHP内核代码期间,发现有大量的宏:EXPECTED(condition)、UNEXPECTED(condition),比如在HashTable的相关实现中就有如下代码片段:
if (nSize < HT_MIN_SIZE) {
nSize = HT_MIN_SIZE;
} else if (UNEXPECTED(nSize &...
我就遇到了这个问题,终于找到解决办法...