gpt4 book ai didi

php - 为什么 apache 将偏移量保存到 php-cli 保存虚拟内存地址的内存中?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:45:32 26 4
gpt4 key购买 nike

我正在调试 php。当查看内存中我知道指向地址的指针所在的位置时,我看到了指针 - 例如 22810408 (0x08048122) - 这是在使用 php 的 CLI 版本时。

但是,当我使用 apache2 并尝试做同样的事情时,我没有看到指向真实地址的指针。相反,我看到 ELF header 的偏移量,当添加到 ELF header 的地址时,它会给我“真实”地址。例如,如果“真实”地址是 0x08048122,而 ELF header 位于 0x08048000,那么我会在同一位置看到 22010000 (0x122)。

当我试图找出堆栈上某物的“真实”地址时,问题就出现了。 “真实”地址应该是 0xbfccxxxx,但是当我将我找到的数字添加到 ELF header 时,事情就是不加起来!我得到了所有错误的地址。

我已经尝试谷歌搜索很长时间了,但我真的不确定如何正确措辞或搜索什么。

因此,我主要寻找的是有关为什么 Apache 具有偏移量而不是实际内存地址的更多信息,以及这一切如何与堆栈上的地址相关。谁能给我任何可能澄清的 Material 的指示?

最佳答案

Apache 使用 mod_php,一个 dynamically linked shared object library (。所以)。参见 what is mod_php? .其中 PHP-CLI 是 zend API(php 可执行文件)的前端。

mod_php 在其一侧加载并利用 zend API 来解析 PHP 文件并将其返回给 apache。如您所见,这里有很多间接性。这种方法比让 apache 使用 PHP 作为守护进程或类似的方法更好更快。

在调试 PHP 时,您通常会在比这更高的级别上工作,因为即使您获得了正确的偏移量; PHP 数据类型与 C 的数据类型不是 1:1(因为 PHP 的鸭子类型),并且对于关联数组和对象,内存中的表示与 C 对象的表示非常不同。

我建议您使用 specialized PHP debugger调试 PHP 应用程序。

关于php - 为什么 apache 将偏移量保存到 php-cli 保存虚拟内存地址的内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8864703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com