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

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

Jun 13, 2016 am 10:54 AM
bug core dump g php 全局 Kernel 动态 导致 扩展 方式 von 空间 编译 链接

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()

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

Wie analysiert und verarbeitet man HTML/XML in PHP? Wie analysiert und verarbeitet man HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

Gate Offizielle Website Eingang Gate Exchange Offizielle Website Gate Offizielle Website Eingang Gate Exchange Offizielle Website Feb 19, 2025 pm 03:03 PM

Auf die offizielle Website von Gate.io kann durch Klicken auf den Link oder die Eingabe der URL im Browser zugegriffen werden. Es wird empfohlen, die URL zu einem Lesezeichen oder Favoriten für den einfachen Zugang hinzuzufügen. Wenn Sie auf unzugängliche Probleme stoßen, versuchen Sie, den Cache und die Cookies des Browsers zu beseitigen. Achten Sie darauf, dass die offizielle Website von Gate.io die Initiative nicht erfüllt, um nach persönlichen Informationen zu fragen. Darüber hinaus bietet Gate.io mobile Anwendungen, die über den App -Anbieter gefunden werden können

Bitmex -Austauschentzugsregeln und Vor- und Nachteile Bitmex -Austauschentzugsregeln und Vor- und Nachteile Feb 21, 2025 pm 10:48 PM

Anforderungen an die Auszahlung von Bitmex Exchange-Währung: Die Überprüfung von zwei Schritten und die Überprüfung der Identität muss abgeschlossen werden. Der Mindestbetrag der Abhebung variiert je nach Währung. Das Auszahlungsprozess beinhaltet die Anmeldung auf dem Konto, die Eingabe der Abhebungsadresse, die Eingabe des Betrags und die Bestätigung der Transaktionen. Die Vorteile des Bitmex -Entzuges umfassen schnelle Verarbeitung, niedrige Gebühren für die Handhabung, Mehrfachwährungsunterstützung und strenge Sicherheitsmaßnahmen. Es wird jedoch auch Mängel wie unzureichender Überwachung, Hackerangriffen, Einschränkungen bei Abhebungen und Kontoeinfragen konfrontiert.

Die neuesten Top -Ten -App -Rankings für digitale Währung im Jahr 2025 Die neuesten Top -Ten -App -Rankings für digitale Währung im Jahr 2025 Feb 27, 2025 pm 06:24 PM

Die zehn Top -Apps für digitale Währungshandel im Jahr 2025 sind: Binance, OKX, Gate.io, Bitget, Huobi, Kucoin, Bitmart, Bybit, Bitfinex und Poloniex. Diese Transaktionen sind auf dem Markt für ihr Handelsvolumen, die Auswahl von Vermögenswerten, den gehebten Handel, den sozialen Handel, die Compliance, die Benutzerfreundlichkeit, niedrige Transaktionsgebühren und die Sicherheit der Fonds.

Wie man mit Trezor handelt und was zu beachten ist Wie man mit Trezor handelt und was zu beachten ist Feb 21, 2025 pm 10:30 PM

Transaktionen auf Trezor verbinden das Trezor -Gerät und installieren Sie die Trezorbridge -Anwendung. Öffnen Sie die Trezor -Suite und wählen Sie den Transaktionstyp aus (senden, empfangen oder eingelöst). Geben Sie Transaktionsdetails (Adresse, Betrag, Gebühr usw.) ein. Überprüfen Sie die Details und drücken Sie die Bestätigung auf dem Trezor -Gerät, um die Transaktion zu autorisieren.

PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge Feb 07, 2025 pm 12:12 PM

Eine Zeichenfolge ist eine Folge von Zeichen, einschließlich Buchstaben, Zahlen und Symbolen. In diesem Tutorial wird lernen, wie Sie die Anzahl der Vokale in einer bestimmten Zeichenfolge in PHP unter Verwendung verschiedener Methoden berechnen. Die Vokale auf Englisch sind a, e, i, o, u und sie können Großbuchstaben oder Kleinbuchstaben sein. Was ist ein Vokal? Vokale sind alphabetische Zeichen, die eine spezifische Aussprache darstellen. Es gibt fünf Vokale in Englisch, einschließlich Großbuchstaben und Kleinbuchstaben: a, e, ich, o, u Beispiel 1 Eingabe: String = "TutorialPoint" Ausgabe: 6 erklären Die Vokale in der String "TutorialPoint" sind u, o, i, a, o, ich. Insgesamt gibt es 6 Yuan

See all articles