如何调试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所说的。