[php内核bug]动态链接方式编译的扩展, 扩展全局空间dtor导致core dump
author: goosman.lei(雷果国)
blog: http://blog.csdn.net/lgg201
mail: lgg860911@yahoo.com.cn
相关代码可以参考
注册扩展的全局空间代码如下:
#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()

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

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.

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

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

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

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 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.

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.

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
