如何调试PHP的内部c代码?
有没有人在这里尝试过或者有可能吗?
我已经使用PHP很多年了,但从来不知道底层的c脚本。
有没有办法进入呢?
我对Zend PHP做了一些黑客攻击。 我发现它overly clever
,有些人甚至认为它是deliberately obfuscated in plain view
。 PHP的源代码是一种思维改变(或破坏)的内容,取决于你在解密非常神秘的宏方面有多好。 这是我对核心的印象。
然而,一旦你掌握了Zend助手,编写扩展就变得轻而易举了,大多数拥有C语言初级/中级知识的人都可以通过基本的扩展。 还有很多例子。 PHP最好的部分之一就是构建系统的组织方式,新东西的丢失相对简单。 通过一点工作和耐心,几乎任何C库都可以轻松扩展到PHP。
如果你不熟悉C(以及与预处理程序的滥用有什么区别),那么浏览一下PHP核心并不会给你太多的了解,如果你正在学习C,那么引用它也不是一件好事。拥有。
继续:
不要让任何我说过的话,或者其他任何人说的话都不会阻止你抓住代码并自己寻找。 话虽如此,至于调试:
-
Valgrind(除非你使用很多抑制)并不是很有帮助。 PHP(据我所知)使用arch优化读取,类似于新版本的glibc。 即即使它仅吞下8位和尾随NULL,它也将读取32位。
-
我从未发现GDB对PHP非常有帮助。 许多神奇的东西都是非常难以追踪的宏。
-
您将很快看到Zend错误记录function及其断言版本。 使用这些,printf()调试几乎没用,除非您调试CLI应用程序。
-
当使用像valgrind的地块这样的工具时,垃圾收集可以让你看到奇怪的东西。 PHP中的分析堆使用是一项我还没有发现的艺术。
最后,我想说看到有人在他们的语言下看看总是很高兴。 所以可以使用一些有助于解密PHP内核的问题,所以请随时发布更多内容:)
另外,请记住,Zend并不是唯一一个制作 php的伪造品。 虽然如果你希望它与Zend的兼容性是最重要的,那么每个人仍然可以自由地做自己的事情。
我从来没有调试过PHP的C代码(也没有扩展) ,但是我有时会在PHP扩展崩溃的情况下生成回溯。
这个页面可能会有所帮助: 生成gdb回溯 。
从那里开始,也许你可以走得更远……
从你的一些问题来看,你可能不知道PHP是开源的,你可以下载它的完整源代码并查看所有的C函数。 如果你想要回溯和调试能力,你必须做Pascal MARTIN所说的。