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