hhvm/systemlib-extractor

该软件包已被废弃,不再维护。未建议替代软件包。

提取 HHVM 中嵌入的 PHP、Hack 和 HNI 文件

v1.2 2018-02-08 23:24 UTC

This package is not auto-updated.

Last update: 2020-01-29 03:38:38 UTC


README

HHVM 的部分功能是用 Hack 实现的,并嵌入到 HHVM 二进制文件中作为额外的 ELF PROGDATA 部分。这个库可以从二进制文件中提取它们。

该库提取两种类型的部分

  • systemlib:纯 Hack 代码
  • ext:内置扩展。这些是正常 Hack 代码和带有 <<__Native>> 用户属性的函数的混合,这些函数在 C++ 运行时中实现

使用此库无法检查不同名称或不是 PROGDATA 的部分。

需求

此软件包需要 readelf 二进制文件;在类似 Debian 的系统上,它在 elfutils 软件包中。

安装

假设您的项目使用 Composer

composer require hhvm/systemlib-extractor

使用

hphpd> require('vendor/autoload.php')
require('vendor/autoload.php')
hphpd> $extractor = new HHVM\SystemlibExtractor\SystemlibExtractor()
$extractor = new HHVM\SystemlibExtractor\SystemlibExtractor()
hphpd> =$extractor->getSectionNames()
=$extractor->getSectionNames()
HH\Vector Object
(
    [0] => "ext.6eedc03a68a6"
    [1] => "ext.a0e7b2a56511"
    [2] => "ext.7c82e855b041"
...
    [119] => "ext.a6be8a33b7c9"
    [120] => "systemlib"
)

hphpd> =$extractor->getSectionContents('systemlib')
=$extractor->getSectionContents('systemlib')
"<?hh\n// {@}generated\n\nnamespace {\n\n// default base\nclass stdClass {\n}\n\n// used in unserialize() for unknown classes\nclass __PHP_Incomplete_Class {\n  public \$__PHP_Incomplete_Class_Name;\n
There are more characters. Continue? [y/N]n
n
hphpd>

构造函数接受两个可选参数

  • HHVM 二进制文件的路径
  • READELF 的路径

许可证

Systemlib-Extractor 采用 BSD 许可证。我们还提供额外的专利许可。

贡献

请参阅 CONTRIBUTING.md