如何调试PHP的内部c代码?

use*_*729 4 php c debugging

有没有人在这里尝试过或者有可能吗?

我已经使用PHP很多年了,但从来不知道底层的c脚本.

有没有办法进入呢?

Tim*_*ost 7

我对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错误记录功能及其断言版本.使用这些,printf()调试几乎没用,除非您调试CLI应用程序.

  • 垃圾收集可以让你在使用像valgrind的地块这样的工具时看到奇怪的东西.PHP中的分析堆使用是一项我还没有发现的艺术.

最后,我想说看到有人在他们的语言下看看总是很好.所以可以使用一些有助于解密PHP内核的问题,所以请随时发布更多内容:)

另外,请记住,Zend不是唯一一个制作 php的伪造品.虽然如果你希望它与Zend的兼容性是最重要的,那么每个人仍然可以自由地做自己的事情.


Pas*_*TIN 1

我从未调试过 PHP 的 C 代码(也没有调试过扩展),但有时会在 PHP 扩展崩溃时生成回溯。

此页面可能会有所帮助:生成 gdb 回溯

从这里开始,也许你能走得更远……