ホームページ php教程 php手册 [php内核bug]动态链接方式编译的扩展, 扩展全局空间dtor导致core dump

[php内核bug]动态链接方式编译的扩展, 扩展全局空间dtor导致core dump

Jun 13, 2016 am 10:54 AM
bug core dump g php 全体的な状況 カーネル 動的 に導く 拡大する 方法 空間 コンパイル リンク

author: goosman.lei(雷果国)

blog: http://blog.csdn.net/lgg201

mail: lgg860911@yahoo.com.cn

 

相关代码可以参考一书第12章, "Extension Globals"一节.

 

 

注册扩展的全局空间代码如下:

#ifdef ZTS

    ts_allocate_id(&sample_globals_id, sizeof(zend_sample_globals), (ts_allocate_ctor)ZEND_MODULE_GLOBALS_CTOR_N(sample), (ts_allocate_dtor)ZEND_MODULE_GLOBALS_DTOR_N(sample));

#else

    sample_globals_ctor(&sample_globals TSRMLS_CC);

#endif

 

 

在ts_allocate_id()函数调用中, 向resource_types_table这个数组中写入了一条记录.

在tsrm_shutdown()的过程中, 将调用注册的dtor回调函数.

 

但是我这边在按照书上编码完后, 运行测试代码会有coredump.

经过跟踪发现, 在zend_shutdown()的调用过程中, 已经对模块调用了DL_UNLOAD(module->handle); 导致当时注册的句柄(dtor)在执行tsrm_shutdown()时已经不可访问.

 

同时, 看到标准扩展中的ext/standard/file.c中也有这种注册方式的使用, 不过, 它应该是静态编译所以没有问题. 而我的扩展是编译.so动态链接的.

 

下面是跟踪zend_shutdown()最终到DL_UNLOAD()的调用路径.

zend_shutdown()  => zend_desctroy_modules() => zend_hash_graceful_reverse_destroy() => zend_hash_apply_deleter() => module_destructor() => DL_UNLOAD()

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法

Bitmexは、引き出し規則と利点と短所を交換します Bitmexは、引き出し規則と利点と短所を交換します Feb 21, 2025 pm 10:48 PM

Bitmexは、引き出し規則と利点と短所を交換します

GATE公式ウェブサイトエントランスゲートエクスチェンジの公式ウェブサイト GATE公式ウェブサイトエントランスゲートエクスチェンジの公式ウェブサイト Feb 19, 2025 pm 03:03 PM

GATE公式ウェブサイトエントランスゲートエクスチェンジの公式ウェブサイト

Trezorで取引する方法と注意すべきこと Trezorで取引する方法と注意すべきこと Feb 21, 2025 pm 10:30 PM

Trezorで取引する方法と注意すべきこと

2025年の最新のトップ10のデジタル通貨取引アプリのランキング 2025年の最新のトップ10のデジタル通貨取引アプリのランキング Feb 27, 2025 pm 06:24 PM

2025年の最新のトップ10のデジタル通貨取引アプリのランキング

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

PHPでHTML/XMLを解析および処理するにはどうすればよいですか?

2025年のトップ10の正式な仮想通貨取引プラットフォームの最新のランキングリスト 2025年のトップ10の正式な仮想通貨取引プラットフォームの最新のランキングリスト Mar 05, 2025 pm 08:21 PM

2025年のトップ10の正式な仮想通貨取引プラットフォームの最新のランキングリスト

See all articles