DE112021004940T5 - Erneutes Laden einer aktualisierten, gemeinsam genutzten Bibliothek, ohne die Ausführung einer Anwendung zu stoppen - Google Patents

Erneutes Laden einer aktualisierten, gemeinsam genutzten Bibliothek, ohne die Ausführung einer Anwendung zu stoppen Download PDF

Info

Publication number
DE112021004940T5
DE112021004940T5 DE112021004940.2T DE112021004940T DE112021004940T5 DE 112021004940 T5 DE112021004940 T5 DE 112021004940T5 DE 112021004940 T DE112021004940 T DE 112021004940T DE 112021004940 T5 DE112021004940 T5 DE 112021004940T5
Authority
DE
Germany
Prior art keywords
shared library
field
resolved
address
computer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE112021004940.2T
Other languages
English (en)
Inventor
Xiao Ling CHEN
Zhan Peng Huo
Yong Yin
Dong Hui Liu
Qi Li
Jia Yu
Jiang Yi Liu
Xiao Xuan Fu
Cheng Fang Wang
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE112021004940T5 publication Critical patent/DE112021004940T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

Zu Techniken gehören ein Ausführen eines Softwareprogramms, das einen Funktionsaufruf einer gemeinsam genutzten Bibliothek hat, und ein erneutes Laden der gemein genutzten Bibliothek, ohne die Ausführung des Softwareprogramms zu stoppen. Eine globale Offsettabelle (GOT) wird als Reaktion auf ein Auflösen einer zu dem Funktionsaufruf gehörenden Verbindungsadresse aktualisiert. Ein Eintrag in der GOT umfasste ein Verbindungsadressfeld, ein Indexfeld und ein Aufgelöst-Feld, wobei das Aktualisieren ein Aktualisieren des Indexfeldes mit einem positiven Wert und ein Markieren des Aufgelöst-Feldes mit einem positiven Flag für den Eintrag in der GOT umfasst. Als Reaktion auf ein erneutes Laden der gemeinsam genutzten Bibliothek wird der Eintrag in der GOT gefunden, der über den positiven Wert in dem Indexfeld und das positive Flag in dem Aufgelöst-Feld verfügt. Als Reaktion auf eine nachfolgende Ausführung des Funktionsaufrufs der gemeinsam genutzten Bibliothek wird ein Adresswert in dem Verbindungsadressfeld für den Eintrag zurückgegeben, der über den positiven Wert in dem Indexfeld verfügt.

Description

  • HINTERGRUND
  • Die vorliegende Erfindung betrifft allgemein Computersysteme und insbesondere Computersysteme, durch einen Computer ausgeführte Verfahren und Computerprogrammprodukte, um ein erneutes Laden einer aktualisierten, gemeinsam genutzten Bibliothek durchzuführen, ohne die Ausführung einer Anwendung zu stoppen.
  • In der Datenverarbeitung ist positionsunabhängiger Code oder eine positionsunabhängige ausführbare Datei ein Hauptteil von Maschinencode, der, irgendwo im primären Speicher platziert, ungeachtet seiner absoluten Adresse ordnungsgemäß ausgeführt wird. Der Begriff „absolute Adresse“ bezieht sich auf einen numerischen Wert, der eine feste Position im realen Speicher in Bezug auf die Anzahl der Bytes vom Anfang oder in einer Peripherieeinheit in Bezug auf Platten, Sektoren und Bytes physisch angibt. Positionsunabhängiger Code wird gewöhnlich für gemeinsam genutzte Bibliotheken verwendet, so dass derselbe Bibliothekscode an eine Position in jedem Programmadressraum geladen werden kann, wo er sich nicht mit anderen Nutzungsmöglichkeiten des Arbeitsspeichers (z. B. anderen gemeinsam genutzten Bibliotheken) überschneidet. Eine gemeinsam genutzte Bibliothek oder ein gemeinsam genutztes Objekt ist eine Datei, die für eine gemeinsame Nutzung durch ausführbare Dateien und weitere gemeinsam genutzte Objektdateien vorgesehen ist. Durch ein Programm verwendete Module werden nicht durch einen Linker kopiert, wenn er eine einzelne monolithische ausführbare Datei für das Programm erstellt, sondern aus einzelnen gemeinsam genutzten Objekten zur Lade- oder Laufzeit in den Arbeitsspeicher geladen. Insbesondere handelt es sich bei gemeinsam genutzten Bibliotheken um Bibliotheken, die durch Programme geladen werden, wenn diese starten. Wenn eine gemeinsam genutzte Bibliothek ordnungsgemäß installiert ist, verwenden alle Programme, die danach starten, automatisch die neue gemeinsam genutzte Bibliothek. Gemeinsam genutzte Bibliotheken können während der Kompilierzeit statisch verbunden werden, was bedeutet, dass Verweise auf die Bibliotheksmodule aufgelöst werden und den Modulen Arbeitsspeicher zugeordnet wird, wenn die ausführbare Datei erstellt wird, oder sie können später dynamisch verbunden werden.
  • Bei der Verwendung von gemeinsam genutzten Bibliotheken können Schwierigkeiten oder Probleme auftreten, wenn die gemeinsam genutzte Bibliothek aktualisiert wird. Wenn zum Beispiel ein Programm ausgeführt wurde, können Probleme auftreten, wenn Quellcode in der gemeinsam genutzten Bibliothek aktualisiert wird, verwendete Kompilieroptionen geändert werden und/oder der Suchpfad modifiziert wird, obgleich positiv-unabhängiger Code verwendet wird. In diesen Fällen müssen Benutzer die Ausführung oder das Debugging des Programms stoppen, um das Softwareprogramm nochmals neu zu laden, damit die aktualisierte, gemeinsam genutzte Bibliothek wirksam wird.
  • KURZDARSTELLUNG
  • Ausführungsformen der vorliegenden Erfindung sind auf ein Durchführen eines erneuten Ladens einer aktualisierten, gemeinsam genutzten Bibliothek gerichtet, ohne die Ausführung einer Anwendung zu stoppen. Ein nicht einschränkendes, beispielhaftes, durch einen Computer ausgeführtes Verfahren umfasst ein Ausführen, durch einen Prozessor, eines Softwareprogramms, das einen Funktionsaufruf einer gemeinsam genutzten Bibliothek erfordert, sowie ein erneutes Laden der gemeinsam genutzten Bibliothek, ohne die Ausführung des Softwareprogramms zu stoppen, wobei die gemeinsam genutzte Bibliothek im Anschluss an die Ausführung des Softwareprogramms aktualisiert wurde. Das durch einen Computer ausgeführte Verfahren umfasst ein Aktualisieren einer globalen Offsettabelle (GOT, global offset table) als Reaktion auf ein Auflösen einer zu dem Funktionsaufruf gehörenden Verbindungsadresse, wobei ein Eintrag
  • in der GOT ein Verbindungsadressfeld, ein Indexfeld und ein Aufgelöst-Feld aufweist, wobei das Aktualisieren ein Aktualisieren des Indexfeldes mit einem positiven Wert und ein Markieren des Aufgelöst-Feldes mit einem positiven Flag für den Eintrag in der GOT aufweist. Das durch einen Computer ausgeführte Verfahren umfasst als Reaktion auf ein erneutes Laden der gemeinsam genutzten Bibliothek, ohne die Ausführung des Softwareprogramms zu stoppen, ein Finden des Eintrags in der GOT, der über den positiven Wert in dem Indexfeld und das positive Flag in dem Aufgelöst-Feld verfügt. Auch umfasst das durch einen Computer ausgeführte Verfahren, als Reaktion auf eine nachfolgende Ausführung des Funktionsaufrufs der gemeinsam genutzten Bibliothek, ein Zurückgeben eines Adresswerts in dem Verbindungsadressfeld für den Eintrag, der über den positiven Wert in dem Indexfeld verfügt.
  • Zusätzlich zu einem oder mehreren der vorstehend oder nachstehend beschriebenen Merkmale oder als Alternative könnten weitere Ausführungsformen vor dem Aktualisieren der GOT ein Setzen des Verbindungsadressfeldes auf einen Standardwert umfassen.
  • Zusätzlich zu einem oder mehreren der vorstehend oder nachstehend beschriebenen Merkmale oder als Alternative könnten weitere Ausführungsformen vor dem Aktualisieren der GOT ein Markieren des Aufgelöst-Feldes mit einem nicht positiven Wert umfassen, wenn das Aufgelöst-Feld zuvor den positiven Wert enthalten hat.
  • Zusätzlich zu einem oder mehreren der vorstehend oder nachstehend beschriebenen Merkmale oder als Alternative könnten weitere Ausführungsformen .... umfassen, wobei das erneute Laden der gemeinsam genutzten Bibliothek, ohne die Ausführung des Softwareprogramms zu stoppen, ein Auflösen einer neuen Adresse für die gemeinsam genutzte Bibliothek, die aktualisiert wurde, aufweist.
  • Zusätzlich zu einem oder mehreren der vorstehend oder nachstehend beschriebenen Merkmale oder als Alternative könnten weitere Ausführungsformen ..... umfassen, wobei das Aktualisieren der GOT ein Ersetzen des Standardwerts durch die neue Adresse in dem Verbindungsadressfeld aufweist.
  • Zusätzlich zu einem oder mehreren der vorstehend oder nachstehend beschriebenen Merkmale oder als Alternative könnten weitere Ausführungsformen ... umfassen, wobei der Adresswert in dem Verbindungsadressfeld die neue Adresse ist, welche für die gemeinsam genutzte Bibliothek aufgelöst wurde.
  • Zusätzlich zu einem oder mehreren der vorstehend oder nachstehend beschriebenen Merkmale oder als Alternative könnten weitere Ausführungsformen ... umfassen, wobei die gemeinsam genutzte Bibliothek vor dem erneuten Laden der gemeinsam genutzten Bibliothek erstmalig für den Funktionsaufruf der gemeinsam genutzten Bibliothek während des Ausführens des Softwareprogramms geladen wird.
  • Zusätzlich zu einem oder mehreren der vorstehend oder nachstehend beschriebenen Merkmale oder als Alternative könnten weitere Ausführungsformen ein Durchführen eines erneuten Ladens einer aktualisierten, gemeinsam genutzten Bibliothek umfassen, ohne die Ausführung des Softwareprogramms/der Softwareanwendung zu stoppen.
  • Zusätzlich zu einem oder mehreren der vorstehend oder nachstehend beschriebenen Merkmale oder als Alternative könnten weitere Ausführungsformen ein Erweitern des Umfangs der globalen Offsettabelle mit einem neuen Bibliotheksindexfeld und einem neuen Adresse-aufgelöst-Flag-Feld umfassen, um einem erneuten Laden der aktualisierten, gemeinsam genutzten Bibliothek Rechnung zu tragen.
  • Ein nicht einschränkendes, beispielhaftes System umfasst einen Arbeitsspeicher, der über durch einen Computer lesbare Anweisungen verfügt, und einen oder mehrere Prozessoren, um die durch einen Computer lesbaren Anweisungen auszuführen. Die durch einen Computer lesbaren Anweisungen steuern den einen oder die mehreren Prozessoren, um Operationen durchzuführen, darunter ein Ausführen eines Softwareprogramms, das einen Funktionsaufruf einer gemeinsam genutzten Bibliothek erfordert, sowie ein erneutes Laden der gemeinsam genutzten Bibliothek, ohne die Ausführung des Softwareprogramms zu stoppen, wobei die gemeinsam genutzte Bibliothek im Anschluss an die Ausführung des Softwareprogramms aktualisiert wurde. Die Operationen umfassen ein Aktualisieren einer globalen Offsettabelle (GOT) als Reaktion auf ein Auflösen einer zu dem Funktionsaufruf gehörenden Verbindungsadresse, eines Eintrags in der GOT, der ein Verbindungsadressfeld, ein Indexfeld und ein Aufgelöst-Feld aufweist, wobei das Aktualisieren ein Aktualisieren des Indexfeldes mit einem positiven Wert und ein Markieren des Aufgelöst-Feldes mit einem positiven Flag für den Eintrag in der GOT aufweist. Die Operationen umfassen als Reaktion auf ein erneutes Laden der gemeinsam genutzten Bibliothek, ohne die Ausführung des Softwareprogramms zu stoppen, ein Finden des Eintrags in der GOT, der über den positiven Wert in dem Indexfeld und das positive Flag in dem Aufgelöst-Feld verfügt. Auch umfassen die Operationen, als Reaktion auf eine nachfolgende Ausführung des Funktionsaufrufs der gemeinsam genutzten Bibliothek, ein Zurückgeben eines Adresswerts in dem Verbindungsadressfeld für den Eintrag, der über den positiven Wert in dem Indexfeld verfügt.
  • Ein nicht einschränkendes Beispiel umfasst ein Computerprogrammprodukt, das ein durch einen Computer lesbares Speichermedium mit damit verkörperten Programmanweisungen aufweist, wobei die Programmanweisungen durch einen Prozessor ausführbar sind, um den Prozessor zum Durchführen von Operationen zu veranlassen, zu denen ein Ausführen eines Softwareprogramms gehört, das einen Funktionsaufruf einer gemeinsam genutzten Bibliothek erfordert. Die Operationen umfassen ein erneutes Laden der gemeinsam genutzten Bibliothek, ohne die Ausführung des Softwareprogramms zu stoppen, wobei die gemeinsam genutzte Bibliothek im Anschluss an die Ausführung des Softwareprogramms aktualisiert wurde. Die Operationen umfassen ein Aktualisieren einer globalen Offsettabelle (GOT) als Reaktion auf ein Auflösen einer zu dem Funktionsaufruf gehörenden Verbindungsadresse, eines Eintrags in der GOT, der ein Verbindungsadressfeld, ein Indexfeld und ein Aufgelöst-Feld aufweist, wobei das Aktualisieren ein Aktualisieren des Indexfeldes mit einem positiven Wert und ein Markieren des Aufgelöst-Feldes mit einem positiven Flag für den Eintrag in der GOT aufweist. Die Operationen umfassen als Reaktion auf ein erneutes Laden der gemeinsam genutzten Bibliothek, ohne die Ausführung des Softwareprogramms zu stoppen, ein Finden des Eintrags in der GOT, der über den positiven Wert in dem Indexfeld und das positive Flag in dem Aufgelöst-Feld verfügt. Auch umfassen die Operationen, als Reaktion auf eine nachfolgende Ausführung des Funktionsaufrufs der gemeinsam genutzten Bibliothek, ein Zurückgeben eines Adresswerts in dem Verbindungsadressfeld für den Eintrag, der über den positiven Wert in dem Indexfeld verfügt.
  • Ein nicht einschränkendes Beispiel umfasst ein durch einen Computer ausgeführtes Verfahren, welches ein erneutes Laden einer gemeinsam genutzten Bibliothek umfasst, ohne die Ausführung eines Softwareprogramms zu stoppen, das die gemeinsam genutzte Bibliothek aufruft. Das durch einen Computer ausgeführte Verfahren umfasst ein Aktualisieren eines Indexfeldes mit einem positiven Wert und ein Markieren eines Aufgelöst-Feldes mit einem positiven Flag für einen Eintrag in einer globalen Offsettabelle (GOT) als Reaktion auf ein Auflösen einer Verbindungsadresse zu der gemeinsam genutzten Bibliothek. Das durch einen Computer ausgeführte Verfahren umfasst als Reaktion auf ein erneutes Laden der gemeinsam genutzten Bibliothek, ohne die Ausführung des Softwareprogramms zu stoppen, ein Finden des Eintrags in der GOT, der über die für die gemeinsam genutzte Bibliothek aufgelöste Verbindungsadresse verfügt.
  • Ein nicht einschränkendes Beispiel umfasst ein System, das einen Arbeitsspeicher, der über durch einen Computer lesbare Anweisungen verfügt, und einen oder mehrere Prozessoren aufweist, um die durch einen Computer lesbaren Anweisungen auszuführen. Die durch einen Computer lesbaren Anweisungen steuern den einen oder die mehreren Prozessoren, um Operationen durchzuführen, die ein erneutes Laden einer gemeinsam genutzten Bibliothek aufweisen, ohne die Ausführung eines Softwareprogramms zu stoppen, das die gemeinsam genutzte Bibliothek aufruft. Die Operationen umfassen ein Aktualisieren eines Indexfeldes mit einem positiven Wert und ein Markieren eines Aufgelöst-Feldes mit einem positiven Flag für einen Eintrag in einer globalen Offsettabelle (GOT) als Reaktion auf ein Auflösen einer Verbindungsadresse zu der gemeinsam genutzten Bibliothek. Die Operationen umfassen als Reaktion auf ein erneutes Laden der gemeinsam genutzten Bibliothek, ohne die Ausführung des Softwareprogramms zu stoppen, ein Finden des Eintrags in der GOT, der über die für die gemeinsam genutzte Bibliothek aufgelöste Verbindungsadresse verfügt.
  • Weitere Ausführungsformen der vorliegenden Erfindung führen Merkmale des vorstehend beschriebenen Verfahrens in Computersystemen und Computerprogrammprodukten aus.
  • Zusätzliche technische Merkmale und Vorteile werden durch die Techniken der vorliegenden Erfindung realisiert. Ausführungsformen und Aspekte der Erfindung werden hierin ausführlich beschrieben und als ein Teil des beanspruchten Gegenstands betrachtet. Für ein besseres Verständnis sei auf die ausführliche Beschreibung und die Zeichnungen verwiesen.
  • Figurenliste
  • Die Besonderheiten der hierin beschriebenen Rechte sind in den Ansprüchen am Ende der Spezifikation besonders hervorgehoben und eindeutig beansprucht. Die vorstehenden und andere Merkmale und Vorteile der Ausführungsformen der Erfindung gehen aus der folgenden ausführlichen Beschreibung in Zusammenschau mit den beiliegenden Zeichnungen hervor, bei denen:
    • 1 ein Blockschaubild eines beispielhaften Computersystems zur Verwendung in Verbindung mit einer oder mehreren Ausführungsformen der vorliegenden Erfindung darstellt;
    • 2 ein Blockschaubild eines Systems zum erneuten Laden einer aktualisierten, gemeinsam genutzten Bibliothek, ohne die Ausführung eines Softwareprogramms/einer Softwareanwendung zu stoppen, gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung darstellt;
    • 3 ein Blockschaubild eines beispielhaften architekturbedingten Ablaufs gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung darstellt;
    • 4 ein Blockschaubild eines beispielhaften Ablaufplans einer Debugging-Sitzung für ein Softwareprogramm/eine Softwareanwendung gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung darstellt;
    • 5 eine beispielhafte globale Offsettabelle mit erweiterten Feldern gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung darstellt;
    • 6 einen beispielhaften architekturbedingten Ablauf gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung darstellt;
    • 7 ein Blockschaubild darstellt, das detaillierte Aktionen veranschaulicht, welche durch einen dynamischen Linker und Debugger gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung durchgeführt werden;
    • 8 ein Blockschaubild darstellt, das Linker-Aktionen gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung darstellt;
    • 9 ein Blockschaubild darstellt, das ein Wiederbefüllen gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung veranschaulicht;
    • 10 ein Blockschaubild darstellt, das weitere Lader-Aktionen gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung veranschaulicht;
    • 11 ein Blockschaubild darstellt, das ein direktes Verzweigen zu der neuen Adresse für die gemeinsam genutzte Bibliothek, wenn anschließend ein Funktionsaufruf durchgeführt wird, gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung veranschaulicht;
    • 12 ein Ablaufplan eines Verfahrens zum Durchführen eines erneutes Ladens einer aktualisierten, gemeinsam genutzten Bibliothek, ohne die Ausführung eines Softwareprogramms/einer Softwareanwendung zu stoppen, gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung ist;
    • 14 eine Cloud-Computing-Umgebung gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung darstellt; und
    • 15 Abstraktionsmodellschichten gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung darstellt.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Eine oder mehrere Ausführungsformen der vorliegenden Erfindung führen ein erneutes Laden einer aktualisierten, gemeinsam genutzten Bibliothek durch, ohne die Ausführung des Zielprogramms/der Zielanwendung zu stoppen. Eine oder mehrere Ausführungsformen der vorliegenden Erfindung stellen eine Technik bereit, um aktualisierte dynamische Bibliotheken, welche durch ein Softwareprogramm/eine Softwareanwendung aufgerufen werden, nahtlos neu zu laden, wenn ein Debugger oder andere Tools eine Aktion zum erneuten Laden einer Bibliothek auslösen. Gemäß einer oder mehreren Ausführungsformen ist der statische Linker so konfiguriert, dass er den Umfang des globalen Offsettabellen-(GOT-)Elements mit einem neuen Bibliotheksindexfeld und einem neuen Adresse-aufgelöst-Flag-Feld erweitert. Der Debugger oder andere Tools sind so konfiguriert, dass sie eine aktualisierte dynamische Bibliothek neu laden und das Bibliotheksindexfeld der GOT durchsuchen und dann die Verbindungsadresse (mit einem Standardwert) und aufgelöste Flags (mit einem Standardwert) zurücksetzen, die in übereinstimmenden GOT-Elementen gespeichert sind, deren bisheriges Adresse-aufgelöst-Flag WAHR lautet. Daher veranlasst die zurückgesetzte Verbindungsadresse in dem Verbindungsadressfeld den Lader dazu, die Verbindungsadresse aufzulösen, wenn die Anwendungsprogrammierschnittstelle (API) aus der aktualisierten, gemeinsam genutzten Bibliothek später aufgerufen wird. Eine oder mehrere Ausführungsformen der Erfindung laden die aktualisierte, gemeinsam genutzte dynamische Bibliothek wirksam neu, ohne die Ausführung oder das Debuggen eines Softwareprogramms/von Softwareanwendungen, das/die die API für die aktualisierten dynamischen Bibliotheken aufruft/aufrufen, zu stoppen. Folglich hilft diese vorteilhafte Technik Benutzern nicht nur, ihre Frage/Anfrage/Eingabe schneller und effizienter zu lösen, sondern bietet ihnen auch eine Möglichkeit, ein flexibleres Testen und/oder Debugging durchzuführen.
  • Eine oder mehrere Ausführungsformen gehen das in modernen Techniken vorkommende Problem an, dass nach erfolgter Ausführung einer Anwendung, wenn Quellcode in der gemeinsam genutzten Bibliothek aktualisiert wird, verwendete Kompilierungsoptionen geändert werden und/oder der Suchpfad modifiziert wird, obgleich positiv-unabhängiger Code verwendet wird, Benutzer die Ausführung oder das Debugging des Softwareprogramms/der Softwareanwendung stoppen müssen, um das Softwareprogramm/die Softwareanwendung erneut zu laden, damit die aktualisierte, gemeinsam genutzte Bibliothek wirksam wird. Der Grund für das Stoppen des Softwareprogramms/der Softwareanwendung besteht darin, dass der aktuelle Lader die Verbindungsadresse nicht gültig auflösen kann, wenn die aktualisierte, gemeinsam genutzte dynamische Bibliothek während der Ausführung des Softwareprogramms/der Softwareanwendung mit einer anderen Adresse geladen wird. Eine solche häufige Neustartaktion während der Programm-/Anwendungsentwicklung und während des Auffindens von Fehlern ist für Entwickler lästig und stellt insbesondere bei Programmen/Anwendungen mit einem sehr komplizierten (oder langen) Quellcode eine Verschwendung ihrer Zeit dar. Jedoch stellen eine oder mehrere Ausführungsformen der Erfindung ein neues innovatives Verfahren bereit, um dieses Szenario anzugehen, und führen dabei eine wirksame Möglichkeit ein, die aktualisierte dynamische Bibliothek nahtlos neu zu laden, ohne die Ausführung oder das Debuggen des/der in Ausführung befindlichen Programms/Anwendung anzuhalten oder zu stoppen.
  • Mit Blick auf 1 ist ein Computersystem 100 gemäß einer oder mehreren Ausführungsformen der Erfindung allgemein gezeigt. Bei dem Computersystem 100 kann es sich um ein elektronisches Computer-Framework handeln, das eine beliebige Anzahl und Kombination von Datenverarbeitungseinheiten und Netzwerken aufweist und/oder nutzt, die von verschiedenen Übertragungstechnologien Gebrauch machen, wie hierin beschrieben ist. Das Computersystem 100 kann leicht skalierbar, erweiterbar und modular sein, mit der Möglichkeit, zu verschiedenen Services zu wechseln oder einige Features unabhängig von anderen neu zu konfigurieren. Das Computersystem 100 kann zum Beispiel ein Server, ein Desktop-Computer, ein Laptop-Computer, ein Tablet-Computer oder ein Smartphone sein. In einigen Beispielen kann das Computersystem 100 ein Cloud-Computing-Knoten sein. Das Computersystem 100 kann in dem allgemeinen Kontext von durch ein Computersystem ausführbaren Anweisungen, wie zum Beispiel Programmmodulen, die durch ein Computersystem ausgeführt werden, beschrieben werden. Im Allgemeinen können Programmmodule Routinen, Programme, Objekte, Komponenten, Logik, Datenstrukturen und so weiter umfassen, die bestimmte Tasks durchführen oder bestimmte abstrakte Datentypen ausführen. Das Computersystem 100 kann in verteilten Cloud-Computing-Umgebungen in die Praxis umgesetzt werden, in denen Aufgaben durch ferne Verarbeitungseinheiten durchgeführt werden, die durch ein Übertragungsnetzwerk verbunden sind. In einer verteilten Cloud-Computing-Umgebung können sich Programmmodule sowohl in lokalen als auch in fernen Speichermedien eines Computersystems, zu denen auch Arbeitsspeichereinheiten gehören, befinden.
  • Wie in 1 gezeigt ist, verfügt das Computersystem 100 über eine oder mehrere zentrale Verarbeitungseinheiten (CPU(s)) 101a, 101b, 101c usw. (die gemeinsam oder allgemein als Prozessor(en) 101 bezeichnet werden). Bei den Prozessoren 101 kann es sich um einen Einzelkernprozessor, einen Mehrkernprozessor, ein Datenverarbeitungscluster oder eine beliebige Anzahl von anderen Konfigurationen handeln. Die Prozessoren 101, die auch als Verarbeitungsschaltungen bezeichnet werden, sind über einen Systembus 102 mit einem Systemspeicher 103 und verschiedenen anderen Komponenten gekoppelt. Zum Systemspeicher 103 kann ein Nur-Lese-Speicher (ROM) 104 und ein Direktzugriffsspeicher (RAM) 105 gehören. Das ROM 104 ist mit dem Systembus 102 gekoppelt und kann ein Basic Input/Output System (BIOS) oder dessen Nachfolger wie Unified Extensible Firmware Interface (UEFI) umfassen, das bestimmte grundlegende Funktionen des Computersystems 100 steuert. Das RAM ist ein mit dem Systembus 102 gekoppelter Schreib-Lese-Speicher zur Verwendung durch die Prozessoren 101. Der Systemspeicher 103 stellt temporären Arbeitsspeicherbereich für Operationen der Anweisungen während des Betriebs bereit. Zum Systemspeicher 103 können Direktzugriffsspeicher (RAM), Nur-Lese-Speicher, Flashspeicher oder beliebige andere geeignete Speichersysteme gehören.
  • Das Computersystem 100 weist einen Eingabe-/Ausgabe- (E/A-)Adapter 106 und einen Übertragungsadapter 107 auf, die mit dem Systembus 102 gekoppelt sind. Bei dem E/A-Adapter 106 kann es sich um einen Small Computer System Interface-(SCSI-)Adapter handeln, der mit einer Festplatte 108 und/oder einer beliebigen anderen ähnlichen Komponente Daten austauscht. Der E/A-Adapter 106 und die Festplatte 108 werden hierin gemeinsam als Massenspeicher 110 bezeichnet.
  • Software 111 zur Ausführung auf dem Computersystem 100 kann in dem Massenspeicher 110 gespeichert sein. Der Massenspeicher 110 ist ein Beispiel für ein durch die Prozessoren 101 lesbares, greifbares Speichermedium, wobei die Software 111 als Anweisungen zur Ausführung durch die Prozessoren 101 gespeichert ist, um das Computersystem 100 dazu zu veranlassen, seinen Betrieb durchzuführen, wie er hierin nachstehend mit Bezug auf die verschiedenen Figuren beschrieben ist. Beispiele eines Computerprogrammprodukts und die Ausführung einer solchen Anweisung werden hierin ausführlicher erläutert. Der Übertragungsadapter 107 verbindet den Systembus 102 mit einem Netzwerk 112, bei dem es sich um ein externes Netzwerk handeln kann, was es dem Computersystem 100 ermöglicht, mit anderen solchen Systemen Daten auszutauschen. In einer einzelnen Ausführungsform speichern ein Teil des Systemspeichers 103 und der Massenspeicher 110 gemeinsam ein Betriebssystem, bei dem es sich um ein beliebiges entsprechendes Betriebssystem handeln kann, um die Funktionen der verschiedenen, in 1 gezeigten Komponenten zu koordinieren.
  • Zusätzliche Eingabe-/Ausgabeeinheiten sind als mit dem Systembus 102 über einen Bildschirmadapter 115 und einen Schnittstellenadapter 116 verbunden gezeigt. In einer einzelnen Ausführungsform können die Adapter 106, 107, 115 und 116 mit einem oder mehreren E/A-Bussen verbunden sein, die mit dem Systembus 102 über eine zwischengeschaltete Busbrücke (nicht gezeigt) verbunden sind. Ein Bildschirm 119 (z.B. eine Anzeige oder ein Anzeigemonitor) ist mit dem Systembus 102 durch den Bildschirmadapter 115 verbunden, der eine Grafiksteuereinheit, um die Leistungsfähigkeit von grafikintensiven Anwendungen zu verbessern, und einen Videocontroller umfassen kann. Eine Tastatur 121, eine Maus 122, ein Lautsprecher 123 usw. können mit dem Systembus 102 über den Schnittstellenadapter 116 verbunden sein, der zum Beispiel einen Super-E/A-Chip umfassen kann, welcher mehrere Einheitenadapter zu einer einzelnen integrierten Schaltung zusammenfasst. Zu geeigneten E/A-Bussen, um Peripherieeinheiten wie beispielsweise Festplattencontroller, Netzwerkadapter und Grafikadapter zu verbinden, gehören üblicherweise gemeinsame Protokolle wie beispielsweise das Peripheral Component Interconnect (PCI) und das Peripheral Component Interconnect Express (PCIe). Somit, wie in 1 konfiguriert, umfasst das Computersystem 100 Verarbeitungsfunktionalität in Form der Prozessoren 101 und Speicherfunktionalität, darunter den Systemspeicher 103 und den Massenspeicher 110, Eingabemittel, wie beispielsweise die Tastatur 121 und die Maus 122, sowie Ausgabefunktionalität, darunter den Lautsprecher 123 und den Bildschirm 119.
  • In einigen Ausführungsformen kann der Übertragungsadapter 107 Daten unter Verwendung einer/eines beliebigen geeigneten Schnittstelle oder Protokolls, wie beispielsweise der Internet Small Computer System Interface, u.a., übertragen. Bei dem Netzwerk 112 kann es sich um ein Mobilfunknetz, ein Funknetz, ein Weitverkehrsnetz (WAN, wide area network), ein lokales Netz (LAN, local area network) oder das Internet, u.a., handeln. Eine externe Datenverarbeitungseinheit kann durch das Netzwerk 112 mit dem Computersystem 100 verbunden werden. In einigen Beispielen kann es sich bei einer externen Datenverarbeitungseinheit um einen externen Webserver oder einen Cloud-Computing-Knoten handeln.
  • Es sei von vornherein klargestellt, dass das Blockschaubild von 1 nicht aussagen soll, dass das Computersystem 100 alle der in 1 gezeigten Komponenten umfassen soll. Vielmehr kann das Computersystem 100 beliebige entsprechende zahlenmäßig geringere oder zusätzliche Komponenten umfassen, die in 1 nicht veranschaulicht sind (z.B. zusätzliche Speicherkomponenten, eingebettete Controller, Module, zusätzliche Netzwerkschnittstellen usw.). Des Weiteren können die hierin in Bezug auf das Computersystem 100 beschriebenen Ausführungsformen mit einer entsprechenden Logik ausgeführt sein, wobei die Logik, wie hierin bezeichnet, beliebige geeignete Hardware (z.B. einen Prozessor, einen eingebetteten Controller oder eine anwendungsspezifische integrierte Schaltung, u.a.), Software (z.B. eine Anwendung, u.a.), Firmware oder eine beliebige geeignete Kombination aus Hardware, Software und Firmware in verschiedenen Ausführungsformen umfassen kann.
  • 2 ist ein Blockschaubild eines Systems 200 zum erneuten Laden einer aktualisierten, gemeinsam genutzten Bibliothek 214, ohne die Ausführung eines Softwareprogramms/einer Softwareanwendung zu stoppen, gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung. 2 stellt ein oder mehrere Computersysteme 202 dar. Zum Beispiel kann das Computersystem 202 stellvertretend für zahlreiche Computer in einem Rechenzentrum stehen, das verschiedene Benutzer bedient. Elemente des Computersystems 100 können in dem Computersystem 202 verwendet werden und/oder darin integriert sein. Ein(e) oder mehrere Softwareprogramme/- anwendungen 230, ein oder mehrere Debugger 240, ein oder mehrere statische Linker 210 und dynamische Linker 212, eine oder mehrere GOTs 208 und eine oder mehrere gemeinsam genutzte Bibliotheken 214 können von einer Software 111 Gebrauch machen und/oder als Software 111 ausgeführt sein, die auf einem oder mehreren Prozessoren 101 ausgeführt wird, wie in 1 erläutert wird.
  • Das Softwareprogramm/die Softwareanwendung 230 wird auf dem Computersystem 202 ausgeführt und das Softwareprogramm/die Softwareanwendung 230 verwendet und/oder benötigt Zugriff auf die gemeinsam genutzte Bibliothek 214 als Teil ihrer Ausführung. Eine gemeinsam genutzte Bibliothek kann einen speziellen Namen mit der Bezeichnung „soname“ haben. Der soname hat das Präfix „lib“, den Namen der Bibliothek, den Ausdruck „.so", gefolgt von einem Punkt, und eine Versionsnummer, die immer dann erhöht wird, wenn sich die Schnittstelle ändert. Ein vollständig qualifizierter soname kann als Präfix das Verzeichnis umfassen, in dem er sich befindet. Auf einem funktionierenden System ist ein vollständig qualifizierter soname einfach ein symbolischer Link zum „realen Namen“ der gemeinsam genutzten Bibliothek. Der reale Name ist der Dateiname, der den eigentlichen Bibliothekscode enthält.
  • In der Datenverarbeitung ist ein Linker oder Linkeditor, wie beispielsweise ein statischer Linker 210 und ein dynamischer Linker 212, ein Computersystemprogramm, das eine oder mehrere Objektdateien (die durch einen Compiler oder einen Assembler erzeugt werden) nimmt und sie zu einer einzelnen ausführbaren Datei, Bibliotheksdatei oder einer anderen „Objekt“-Datei zusammenfasst. Computerprogramme, wie beispielsweise das Softwareprogramm/die Softwareanwendung 230, bestehen in der Regel aus mehreren Teilen oder Modulen. Diese Teile/Module brauchen nicht alle in einer einzelnen Objektdatei enthalten zu sein und verweisen in solchen Fällen durch Symbole (z.B. in einer Symboltabelle 216) als Adressen in andere Module aufeinander, die, wenn sie zur Ausführung verknüpft werden, in Arbeitsspeicheradressen (des Arbeitsspeichers 206) abgebildet werden. Üblicherweise kann eine Objektdatei drei Arten von Symbolen enthalten: definierte „externe“ Symbole, zuweilen als „öffentliche“ oder „Eingangs“-Symbole bezeichnet, die deren Aufruf durch andere Module ermöglichen; undefinierte „externe“ Symbole, die andere Module referenzieren, bei denen diese Symbole definiert sind; und lokale Symbole, die intern innerhalb der Objektdatei verwendet werden, um eine Relokation zu ermöglichen. Relokationen sind Einträge in Binärdateien, die später noch anzugeben sind, und zwar zur Verbindungszeit durch den statischen Linker (Binder) oder zur Laufzeit durch den dynamischen Linker (Lader).
  • Viele Betriebssystemumgebungen ermöglichen ein dynamisches Verbinden (z.B. unter Verwendung des dynamischen Linkers 212), was die Auflösung von einigen undefinierten Symbolen verzögert, bis ein Programm (z.B. das Softwareprogramm/die Softwareanwendung 230) ausgeführt wird. Das bedeutet, dass der ausführbare Code des Softwareprogramms/der Softwareanwendung 230 immer noch undefinierte Symbole sowie eine Liste von Objekten oder Bibliotheken (z.B. eine oder mehrere gemeinsam genutzte Bibliotheken 214) enthält, die Definitionen für diese undefinierten Symbole bereitstellen. Ein dynamisch verbundenes Programm (z.B. das Softwareprogramm/die Softwareanwendung 230) enthält eine kleine, statisch verbundene Funktion, die beim Programmstart aufgerufen wird. Diese statische Funktion bildet die Verbindungsbibliothek (z.B. eine oder mehrere gemeinsam genutzte Bibliotheken 214) im Arbeitsspeicher 206 ab und führt den Code aus, den die Funktion enthält. Der dynamische Linker 212 stellt fest, um was es sich bei all den gemeinsam genutzten dynamischen Bibliotheken, die das Programm benötigt, sowie den Namen der Variablen und den aus diesen Bibliotheken benötigten Funktionen handelt, indem er die in Abschnitten der gemeinsam genutzten Bibliothek enthaltenen Informationen liest. Danach bildet der dynamische Linker 212 die gemeinsam genutzten Bibliotheken in der Mitte des virtuellen Arbeitsspeichers ab und löst die Verweise auf die in diesen gemeinsam genutzten Bibliotheken enthaltenen Symbole auf. Dem Softwareprogramm ist nicht bekannt, wo im Arbeitsspeicher 206 diese gemeinsam genutzten Bibliotheken (z.B. eine oder mehrere gemeinsam genutzte Bibliotheken 214) tatsächlich abgebildet sind. Die gemeinsam genutzten Bibliotheken werden in positionsunabhängigen Code (PIC, position-independent code) kompiliert, der an jeder Adresse im Arbeitsspeicher ausgeführt werden kann.
  • Andererseits ist das statische Verbinden (z.B. unter Verwendung des statischen Linkers 210) das Ergebnis davon, dass der Linker alle in dem Softwareprogramm/der Softwareanwendung 230 verwendeten Bibliotheksroutinen in das/die ausführbare Image/Datei kopiert. Dies kann mehr Plattenspeicherplatz und Arbeitsspeicher 206 in Anspruch nehmen als das dynamische Verbinden, ist aber portierbarer, da das Programm es nicht erforderlich macht, dass sich die gemeinsam genutzte Bibliothek auf dem System befindet, auf dem es ausgeführt wird. Wenn man zum Beispiel auf die ausführbare (.exe-)Datei des Programms klickt und das Programm mit der Ausführung beginnt, wurde der gesamte notwendige Inhalt der Binärdatei in den virtuellen Adressraum des Prozesses geladen. Jedoch müssen die meisten Programme auch Funktionen aus den gemeinsam genutzten Bibliotheken des Systems ausführen, und diese Bibliotheksfunktionen müssen ebenfalls geladen werden. Im einfachsten Fall sind die benötigten Bibliotheksfunktionen direkt in die ausführbare Binärdatei des Programms eingebettet. Ein solches Programm ist mit seinen Bibliotheken statisch verbunden, und statisch verbundene ausführbare Codes können mit ihrer Ausführung beginnen, sobald sie geladen sind.
  • Ein Debugger 240 oder ein Debugging-Tool ist ein Computerprogramm, das zum Testen und Debuggen von anderen Programmen wie beispielsweise des Softwareprogramms/der Softwareanwendung 230 verwendet wird. Der Debugger 240 ist so konfiguriert, dass er das Softwareprogramm/die Softwareanwendung 230 unter kontrollierten Bedingungen ausführt, die es dem Programmierer gestatten, seine/ihre laufenden Operationen zu verfolgen und Änderungen bei den Computerressourcen (wie zum Beispiel durch das Programm oder das Betriebssystem des Computers verwendete Speicherbereiche) zu überwachen, die ein Hinweis auf einen nicht funktionierenden Code in dem Softwareprogramm/der Softwareanwendung 230 sein können. Der Debugger 240 verfügt über die Möglichkeit, das Programm an bestimmten Punkten auszuführen oder anzuhalten, den Inhalt des Arbeitsspeichers, von CPU-Registern (z.B. von Registern 250) oder Speichereinheiten (wie beispielsweise Plattenlaufwerken) anzuzeigen und den Arbeitsspeicher- oder Registerinhalt zu modifizieren, um ausgewählte Testdaten einzugeben, die eine Ursache für eine fehlerhafte Programmausführung sein könnten.
  • Das Computersystem 202 umfasst eine globale Offsettabelle (GOT) 208, bei der es sich um einen Abschnitt des Arbeitsspeichers eines Computerprogramms (ausführbare Dateien und gemeinsam genutzte Bibliotheken) handelt, welcher verwendet wird, um zu ermöglichen, dass Computerprogrammcode (z.B. als eine ELF-Datei kompiliert) korrekt ausgeführt wird, und zwar unabhängig von der Arbeitsspeicheradresse, an die der Code oder die Daten des Programms zur Laufzeit geladen werden. Die GOT 208 bildet Symbole in Programmiercode auf ihre entsprechenden absoluten Arbeitsspeicheradressen ab, um positionsunabhängigen Code (PIC) und positionsunabhängige ausführbare Dateien (PIE, position-independent executables) zu ermöglichen, die jedes Mal, wenn das Softwareprogramm gestartet wird, an eine andere Arbeitsspeicheradresse geladen werden. Die Arbeitsspeicheradresse zur Laufzeit, die auch als absolute Arbeitsspeicheradresse von Variablen und Funktionen bezeichnet wird, ist vor dem Start des Programms, wenn PIC- oder PIE-Code ausgeführt wird, unbekannt, so dass die Arbeitsspeicheradresse zur Laufzeit während der Kompilierung durch einen Compiler nicht hart codiert sein kann. Die GOT kann als die .got- und .got-plt-Abschnitte in Dateien (z.B. einer ELF-Datei) dargestellt werden, die beim Start in den Arbeitsspeicher des Programms geladen werden. Zum Beispiel wird der dynamische Linker des Betriebssystems verwendet, um die Relokationen der globalen Offsettabelle (Symbol zu absoluten Arbeitsspeicheradressen) beim Programmstart oder beim Zugriff auf Symbole zu aktualisieren. Die GOT 208 ist der Mechanismus, der es gemeinsam genutzten Bibliotheken (z.B..so) ermöglicht, beim Start an eine andere Arbeitsspeicheradresse verschoben zu werden und Arbeitsspeicheradressenkonflikte mit dem Hauptprogramm oder anderen gemeinsam genutzten Bibliotheken zu vermeiden. Die GOT 208 ist eine Tabelle mit Adressen, die sich im Datenabschnitt befinden. Die GOT 208 wandelt positionsunabhängige Adressberechnungen in absolute Positionen um. Bei der Procedure Linkage Table (PLT) (nicht gezeigt) handelt es sich um eine Tabelle, die positionsunabhängige Funktionsaufrufe an absolute Positionen umleitet. Der Linkeditor kann Ausführungsübertragungen wie beispielsweise Funktionsaufrufe zwischen verschiedenen dynamischen Objekten nicht auflösen. Folglich sorgt der Linkeditor dafür, dass das Programm die Steuerung an Einträge in der Procedure Linkage Table übergibt. Der Linker zur Laufzeit leitet somit die Einträge um, ohne die Positionsunabhängigkeit und die gemeinsame Nutzbarkeit des Textes des Programms zu beeinträchtigen. Ausführbare Dateien und gemeinsam genutzte Objektdateien können separate Procedure Linkage Tables haben.
  • 3 ist ein Blockschaubild eines beispielhaften architekturbedingten Ablaufs 300 gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung. Der architekturbedingte Ablauf 300 wird unter Bezugnahme auf 2 beschrieben. Wie vorstehend erwähnt wurde, wird das Softwareprogramm/die Softwareanwendung 230 auf dem Computersystem 202 ausgeführt und die gemeinsam genutzte Bibliothek 214 wird anschließend aktualisiert und neu geladen, ohne die Ausführung des Softwareprogramms/der Softwareanwendung 230 zu stoppen oder anzuhalten. Am Block 302 wird der Debugger 240 so konfiguriert, dass er eine Debugging-Sitzung für das Softwareprogramm/die Softwareanwendung 230 beginnt, und während der Debugging-Sitzung wird der Debugger 240 so konfiguriert, dass er einen Befehl zum erneuten Laden, wie zum Beispiel reload liba.so, ausgibt, wodurch die gemeinsam genutzte Bibliothek 214 neu geladen wird, da die gemeinsam genutzte Bibliothek 214 aktualisiert wurde. Bei der Ausführung des Softwareprogramms/der Softwareanwendung 230 wird der Debugger 240 so konfiguriert, dass er die Software (APIs), die jeweils dem statischen Linker 210, dem dynamischen Linker 212, der GOT 208 und der gemeinsam genutzten Bibliothek zugeordnet ist, aufruft und/oder mit ihr Daten austauscht, um so zu funktionieren, wie hierin erläutert wird.
  • Der Block 304 ist so konfiguriert, dass er mit dem Wiederbefüllen der GOT 208 beginnt/das Wiederbefüllen der GOT 208 durchführt, indem er die Adresse zurücksetzt, die zuvor für die gemeinsam genutzte Bibliothek (z.B. für liba.so) aufgelöst wurde. Zum Beispiel wurde ein bestimmter GOT-Eintrag in der GOT-Tabelle 208, eine alte Adresse 320, zuvor in einem Verbindungsadressfeld (z.B. dem in 5 dargestellten Verbindungsadressfeld 504) der GOT 208 für die gemeinsam genutzte Bibliothek 214 aufgelöst. Die alte Adresse 320 wurde zuvor durch den dynamischen Linker 212 aufgelöst. Da die gemeinsam genutzte Bibliothek 214 neu geladen/aktualisiert wird, wird die GOT 208 so konfiguriert, dass sie die alte Adresse 320 auf einen Anfangswert 322 in dem in 5 dargestellten Verbindungsadressfeld 504 zurücksetzt. Der Anfangswert wird im Voraus als ein Standardwert vordefiniert. Ferner, wie hierin zu sehen sein wird, umfasst ein Durchführen des Wiederbefüllens der GOT nicht nur ein Zurücksetzen der Verbindungsadresse von der alten Adresse auf den Anfangswert (mit dem sie ursprünglich verbunden war) (d.h. Standardwert), sondern auch ein Zurücksetzen des GOT-aufgelöst-Flags von WAHR auf FALSCH (z.B. in dem in 5 dargestellten Aufgelöst-Flag-Feld 508).
  • Am Block 306 wird der dynamische Linker 212 wieder (d.h. später) aufgerufen, um die neue Adresse für die gemeinsam genutzte Bibliothek 214 (z.B. liba.so) aufzulösen, da die gemeinsam genutzte Bibliothek 214 aktualisiert wurde. Am Block 308 wird der dynamische Linker 212 so konfiguriert, dass er ein dynamisches Laden durchführt. Wenn ein in der dynamischen Bibliothek (z.B. liba.so) definiertes Symbol (z.B. eine Funktion foo) zum ersten Mal aufgerufen wird, nachdem die aktualisierte liba.so neu geladen wurde, führt der dynamische Linker 212 eine Auflösung eines nicht aufgelösten (verschobenen) Eintrags durch, indem er die Tabelle 215 mit nicht aufgelösten Einträgen und die Symboltabelle 216 nach einer Übereinstimmung mit der neuen Adresse 324 durchsucht. Für den in der Tabelle 215 mit nicht aufgelösten Einträgen gefundenen nicht aufgelösten Eintrag sucht der dynamische Linker 212 nach dem Symbol in einer Symboltabelle 216 und ruft es ab, welches verwendet wird, um die neue Adresse für die gemeinsam genutzte Bibliothek 214 (liba.so) aufzulösen. Unter Verwendung der Symboltabelle 216 dient der dynamische Linker 212 dazu, das Symbol für die gemeinsam genutzte Bibliothek 214 (liba.so) aufzulösen. Sobald das Symbol aufgelöst ist, aktualisiert der dynamische Linker 212 einen Eintrag (für das aufgelöste Symbol) in einer Indextabelle 218, die zu der gemeinsam genutzten Bibliothek 214 gehört. Am Block 310 wird der dynamische Linker 212 so konfiguriert, dass er die GOT 208 mit der neuen Adresse 324 (d.h. einem neuen Wert für das in 5 dargestellte Verbindungsadressfeld 504) aktualisiert, die aufgelöst wurde. Auch setzt der dynamische Linker 212 das GOT-aufgelöst-Flag von FALSCH auf WAHR (z.B. in dem in 5 dargestellten Aufgelöst-Flag-Feld 508).
  • Am Block 312 wird der dynamische Linker 212 (oder Lader) so konfiguriert, dass er die neu aufgelöste Adresse der gemeinsam genutzten Bibliothek 214 in einen Arbeitsspeicherbereich zur Verwendung durch das Softwareprogramm/die Softwareanwendung 230 lädt. Bei dem Arbeitsspeicherbereich kann es sich um eine oder mehrere durch das Softwareprogramm/die Softwareanwendung 230 verwendete Positionen im Arbeitsspeicher 206, ein oder mehrere Register 250 für Prozessoren (wie beispielsweise die Prozessoren 101) usw. handeln. Ein beispielhaftes Ergebnis des Debuggers 240 und/oder des dynamischen Linkers 212 kann die Eingabe 330 sein. Die Eingabe 330 kann einen Bibliotheksdateinamen (z.B. liba.so) in der gemeinsam genutzten Bibliothek 214 und/oder eine andere Ausgabedatei (z.B. a.out) umfassen. 4 ist ein Blockschaubild eines beispielhaften Ablaufplans 400 einer Debugging-Sitzung für ein Softwareprogramm/eine Softwareanwendung 230 gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung. Wie vorstehend erwähnt wurde, wird das Softwareprogramm/die Softwareanwendung 230 auf dem Computersystem 202 ausgeführt und die gemeinsam genutzte Bibliothek 214 wird anschließend aktualisiert und neu geladen. Am Block 402 wird der Debugger 420 so konfiguriert, dass er die Debugging-Sitzung für das Softwareprogramm/die Softwareanwendung 230 beginnt. Am Block 404 wird der Debugger so konfiguriert, dass er eine Benutzereingabe empfängt. Bei der Benutzereingabe könnte es sich um eine Autorisierung für eine Fortsetzung des Debugging handeln, um einen bestimmten zu untersuchenden Abschnitt von Code in dem Softwareprogramm/der Softwareanwendung 230 anzugeben, usw. Zum Beispiel könnte ein Befehl „reload liba.so“ durch den Benutzer eingegeben werden. Am Block 406 wird der Debugger 240 so konfiguriert, dass er prüft, ob ein erneutes Laden der gemeinsam genutzten Bibliothek 214 erforderlich ist. Wenn kein erneutes Laden erforderlich ist, schaltet der Ablauf zum Block 410. Wenn die gemeinsam genutzte Bibliothek 214 aktualisiert wurde, so zum Beispiel, wenn eine oder mehrere Arbeitsspeicheradressen geändert wurden (eine neue Adresse ersetzt z.B. eine bisherige Adresse in der gemeinsam genutzten Bibliothek 214), stellt der Debugger 240 fest, dass ein erneutes Laden der gemeinsam genutzten Bibliothek 214 erforderlich ist, damit die Änderungen/Aktualisierungen wirksam werden. In einem Beispiel empfängt der Debugger 240 gegebenenfalls einen Trigger oder eine Anweisung, dass die gemeinsam genutzte Bibliothek 214 erneut in den Arbeitsspeicher 206 geladen werden soll.
  • Am Block 408 wird der Debugger 240 so konfiguriert, dass er ein Wiederbefüllen der GOT durchführt und/oder veranlasst, dass ein Wiederbefüllen der GOT durchgeführt wird. Insbesondere wird der Debugger 240 und/oder ein anderes Softwaretool während des Wiederbefüllens der GOT so konfiguriert, dass er/es den GOT-Eintrag in der GOT 208 wiederbefüllt, welcher der Adresse (oder dem Symbol) entspricht, die aktualisiert wurde, und folglich wird die GOT 208 mit einem Anfangswert 322 (z.B. einem Anfangswert von 0x80000000 als Standardwert) zurückgesetzt. In einer oder mehreren Ausführungsformen umfasst der Debugger 240 gegebenenfalls ein GOT-Wiederbefüllungsmodul 242 und/oder andere Tools können ein GOT-Wiederbefüllungsmodul 242 umfassen. Das GOT-Wiederbefüllungsmodul 242 umfasst durch einen Computer ausführbare Anweisungen, die so konfiguriert sind, dass sie das hierin erläuterte GOT-Wiederbefüllen durchführen. In einer oder mehreren Ausführungsformen kann das GOT-Wiederbefüllungsmodul 242 in den dynamischen Linker 212, die GOT 208 und/oder andere Software-Tools integriert sein. Am Block 410 wird der Debugger 240 so konfiguriert, dass er die neue Adresse auflöst und/oder den dynamischen Linker 212 dazu veranlasst, die neue Adresse aufzulösen. Der Prozess des Ladens wird ausgelöst, um die nicht aufgelöste Adresse (bei der es sich um die neue Adresse handelt) für die gemeinsam genutzte Bibliothek 214 aufzulösen, die neu geladen wurde. Das Auflösen der neuen Adresse wird an den Blöcken 306 und 308 in 3 erläutert. Am Block 412 wird der Debugger 240 so konfiguriert, dass er eine Debugger-Ausgabe bereitstellt. Der Debugger 240 gibt die Ergebnisse gemäß der Benutzeranforderung aus, z.B., welche Quellenzeile nach dem Ausführen des Debug-Befehls „continue“, „next“ usw. gestoppt wird. Die Debugger-Sitzung endet immer, wenn der Benutzer das Debugger-Programm beendet, zum Beispiel gemäß einer Benutzereingabe am Block 404.
  • Um das Wiederbefüllen der GOT durchzuführen, legen eine oder mehrere Ausführungsformen eine neue GOT 208 (d.h. eine neue globale Offsettabelle) vor, wie in 5 erläutert wird. Wie in 5 zu sehen ist, umfasst die beispielhafte GOT 208 drei Spalten. Der Offset 502 stellt dar, welches GOT-Element verwendet wird, um die Verbindungsadresse des in einer dynamischen Bibliothek definierten Symbols zu speichern. Zum Beispiel kann der Offset bei 0x00 beginnen, und jedes GOT-Element bzw. jeder GOT-Eintrag (z.B. Zeile) hat in diesem Beispiel 8 Byte. Die erste Spalte stellt das Verbindungsadressfeld 504 dar, bei dem es sich um den Elementwert handelt, der die aufgelöste Verbindungsadresse für das GOT-Element/den GOT-Eintrag in der GOT 208 enthält. Die GOT 208 wird so erweitert, dass sie zwei neue Spalten umfasst, bei denen es sich um die zweite und die dritte Spalte gemäß einer oder mehreren Ausführungsformen der Erfindung handelt. Für die erweiterten GOT-Felder erweitert der statische Linker 210 die Größe des GOT-Elements oder -Eintrags von, zum Beispiel, 4 Byte auf 8 Byte und führt zwei neue Felder in den erweiterten 4 Byte ein: ein Indexfeld der dynamischen Bibliothek (DLL) und ein Aufgelöst-Flag-Feld. Die zweite Spalte stellt das DLL-Indexfeld 506 des verbundenen Moduls (d.h. der gemeinsam genutzten Bibliothek 214) dar, nachdem es aufgelöst wurde. Die dritte Spalte stellt das Aufgelöst-Flag-Feld 508 dar, das angibt, ob die Moduladresse (d.h. die Verbindungsadresse) aufgelöst ist oder nicht. Standardmäßig ist das Aufgelöst-Flag auf „FALSCH“ gesetzt und es wird auf „WAHR“ gesetzt, wenn die Symboladresse (des Softwareprogramms/der Softwareanwendung 230) durch den Lader (z.B. den dynamischen Linker 212) aufgelöst wird.
  • 6 ist ein beispielhafter architekturbedingter Ablauf 600 mit weiteren Einzelheiten des GOT-Wiederbefüllens gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung. Wie hierin erläutert wird, wird das Softwareprogramm/die Softwareanwendung 230 auf dem Computersystem 202 ausgeführt (z.B. während einer Debugging-Sitzung) und die gemeinsam genutzte Bibliothek 214 wird anschließend aktualisiert und neu geladen. Am Block 602 wird ein Debugging oder Testen des Softwareprogramms/der Softwareanwendung 230 über den Debugger 240 gestartet. Während der Debugging-Sitzung kann Code des Softwareprogramms/der Softwareanwendung 230 eine Funktion umfassen, um zum Beispiel die gemeinsam genutzte Bibliothek 214 aufzurufen, wie beispielsweise die in liba.so definierte Funktion bar( ). Am Block 604 wird der Debugger 240 (z.B. unter Verwendung des GOT-Wiederbefüllungsmoduls 242) so konfiguriert, dass er prüft, ob der GOT-Eintrag oder das GOT-Element in der GOT 208, der bzw. das zu dem Aufruf durch die Funktion gehört, gleich einem Anfangswert für die Arbeitsspeicheradresse ist. Ein beispielhafter Anfangswert (z.B. der Anfangswert 322) der Arbeitsspeicheradresse (d.h. der Verbindungsadresse in der GOT 208) könnte 0x80000000 lauten. Wenn die Arbeitsspeicheradresse für den aufgerufenen GOT-Eintrag oder das aufgerufene GOT-Element in der GOT 208 nicht der Anfangswert ist, kehrt der Ablauf zum Block 602 zurück. Wenn die Arbeitsspeicheradresse für den aufgerufenen GOT-Eintrag oder das aufgerufene GOT-Element in der GOT 208 der Anfangswert ist, schaltet der Ablauf zum Block 614, der weiter unten erläutert wird.
  • Wie hierin erwähnt wurde, wurde eine Arbeitsspeicheradresse in der gemeinsam genutzten Bibliothek 214 aktualisiert und/oder geändert, nachdem das Softwareprogramm/die Softwareanwendung 230 zuvor mit der Ausführung begonnen hat. Der Debugger 240 hat die Debugging-Sitzung begonnen und wurde über die Aktualisierung/Änderung der gemeinsam genutzten Bibliothek 214 zum Beispiel beim Aufruf der gemeinsam genutzten Bibliothek 214 benachrichtigt/informiert. Zum Beispiel informiert ein Debugger-Befehl, zum Beispiel „reload liba.so“, den Debugger 240 darüber, dass liba.so neu geladen werden muss. Folglich wird der Debugger 240, ohne das Softwareprogramm/die Softwareanwendung 230 anzuhalten und/oder neu zu starten, so konfiguriert, dass er die aktualisierte, gemeinsam genutzte Bibliothek 214 (z.B. liba.so) und die GOT 208 am Block 606 neu lädt. Am Block 608 wird der Debugger 240 so konfiguriert, dass er prüft, ob das GOT-aufgelöst-Flag im Aufgelöst-Flag-Feld 508 für den GOT-Eintrag oder das GOT-Element WAHR lautet. Zum Beispiel kann der Debugger 240 unter Verwendung der GOT 208 das Aufgelöst-Flag-Feld 508 für den GOT-Eintrag/das GOT-Element (d.h. die Zeile) prüfen. Wenn das GOT-aufgelöst-Flag für den GOT-Eintrag/das GOT-Element FALSCH lautet, schaltet der Ablauf zum Block 602. Wenn das GOT-aufgelöst-Flag für den GOT-Eintrag/das GOT-Element WAHR lautet, wird der Debugger 240 so konfiguriert, dass er am Block 610 prüft, ob der Wert des DLL-Index in dem DLL-Indexfeld 506 für den GOT-Eintrag/das GOT-Element in der GOT 208 gleich dem Wert des DLL-Index für den/das entsprechende(n) Eintrag/Element in der DLL-Indextabelle 218 in der gemeinsam genutzten Bibliothek 214 (z.B. liba.so) ist. Wenn der Wert des DLL-Indexfeldes 506 für den GOT-Eintrag/das GOT-Element in der GOT 208 nicht gleich dem Wert des entsprechenden Eintrags/Elements für den DLL-Index in der DLL-Indextabelle 218 der gemeinsam genutzten Bibliothek 214 (z.B. liba.so) ist, kehrt der Ablauf zum Block 602 zurück. Wenn der Wert des DLL-Indexfeldes 506 für den GOT-Eintrag/das GOT-Element in der GOT 208 gleich dem Wert für den/das entsprechende(n) Eintrag/Element in dem DLL-Index der DLL-Indextabelle 218 in der gemeinsam genutzten Bibliothek 214 (z.B. liba.so) ist, wird der Debugger 240 so konfiguriert, dass er am Block 612 ein Wiederbefüllen der GOT durchführt. Wie hierin erwähnt wurde, wurde die alte Verbindungsadresse (z.B. die alte Adresse 320) in dem Verbindungsadressfeld 504 unter Verwendung des dynamischen Linkers 212 zuvor aufgelöst, bevor eine entsprechende Arbeitsspeicheradresse in der gemeinsam genutzten Bibliothek 214 aktualisiert wurde. Da die gemeinsam genutzte Bibliothek 214 neu geladen/aktualisiert wird, wird der Debugger 240 so konfiguriert, dass er die Verbindungsadresse in dem Verbindungsadressfeld für den GOT-Eintrag/das GOT-Element der GOT 208 zurücksetzt (z.B. die alte Adresse 320 auf einen Anfangswert 322 wie beispielsweise 0x8000000 zurücksetzt) und das GOT-aufgelöst-Flag in dem Aufgelöst-Flag-Feld auf FALSCH zurücksetzt (wie vorstehend für den Block 304 erwähnt).
  • Der Ablauf kehrt zum Block 602 zurück, in dem der Debugger 240 so konfiguriert wird, dass er den Aufruf bar( ) an liba.so (gemeinsam genutzte Bibliothek 214, die nun aktualisiert wurde) erneut durchführt. Zum Block 604 zurückkehrend, wird der Debugger 240 so konfiguriert, dass er prüft, ob der GOT-Eintrag oder das GOT-Element, der bzw. das zu dem Aufruf durch die Funktion gehört (z.B. dem Aufruf bar( )), auf einen Anfangswert für die Arbeitsspeicheradresse (d.h. die Verbindungsadresse in der GOT 208) gesetzt ist. Wenn die Arbeitsspeicheradresse (z.B. die Verbindungsadresse im Verbindungsadressfeld 504 von 5) für den aufgerufenen GOT-Eintrag oder das aufgerufene GOT-Element in der GOT 208 der Anfangswert ist (z.B. der Anfangswert 322), weist der Debugger 240 den dynamischen Linker 212 an oder veranlasst ihn dazu, die neue Verbindungsadresse am Block 614 aufzulösen. Am Block 616 wird der dynamische Linker 212 (z.B. durch den Debugger 240 veranlasst) so konfiguriert, dass er ein dynamisches Laden durchführt (z.B. wie vorstehend am Block 308 erläutert). Der dynamische Linker 212 sucht nach einer Übereinstimmung mit der neuen Adresse 324 in einer Tabelle 215 mit nicht aufgelösten (verschobenen) Einträgen, um den nicht aufgelösten Eintrag zu finden. Für den in der Tabelle 215 mit nicht aufgelösten Einträgen gefundenen nicht aufgelösten Eintrag sucht der dynamische Linker 212 nach dem Symbol in einer Symboltabelle 216 und ruft es ab, welches verwendet wird, um die neue Adresse für die gemeinsam genutzte Bibliothek 214 (liba.so) aufzulösen. Unter Verwendung der Symboltabelle 216 dient der dynamische Linker 212 dazu, das Symbol für die gemeinsam genutzte Bibliothek 214 (liba.so) aufzulösen. Sobald das Symbol aufgelöst ist, aktualisiert der dynamische Linker 212 einen Eintrag (für das aufgelöste Symbol) in der Indextabelle 218, die zu der gemeinsam genutzten Bibliothek 214 gehört. Am Block 310 wird der Debugger 240 so konfiguriert, dass er die GOT 208 mit der neuen Adresse 324 (d.h. dem neuen Wert für das in 5 dargestellte Verbindungsadressfeld 504) aktualisiert, die aufgelöst wurde. Auch kann der Debugger 240 das GOT-aufgelöst-Flag von FALSCH auf WAHR setzen. Am Block 618 wird der Debugger 240 so konfiguriert, dass er die GOT 208 aktualisiert und/oder den dynamischen Linker 212 dazu veranlasst, die GOT 208 zu aktualisieren. Während der Aktualisierung des GOT-Eintrags oder -Elements in der GOT 208 wird der Debugger 240 und/oder der dynamische Linker 212 so konfiguriert, dass er die neue aufgelöste Adresse als die Verbindungsadresse des Verbindungsadressfeldes 504 angibt, den DLL-Index im DLL-Indexfeld 506 aktualisiert und das Aufgelöst-Flag der Verbindungsadresse im Aufgelöst-Flag-Feld 508 als WAHR markiert.
  • Zum Zweck der Erklärung und nicht als Einschränkung werden in den 7 bis 11 beispielhafte Szenarien erläutert. 7 ist ein Blockschaubild, das detaillierte Aktionen darstellt, welche durch den dynamischen Linker und Debugger gemäß einer oder mehreren Ausführungsformen der Erfindung durchgeführt werden. Normalerweise erfordert ein erneutes Laden der gemeinsam genutzten Bibliothek, dass die Ausführung des Programms/der Anwendung gestoppt wird. Wenn ein typisches System jedoch versucht, die Ausführung des Programms/der Anwendung fortzusetzen, ohne es/sie zu stoppen, würde das typische System die neu kompilierte, gemeinsam genutzte Bibliothek (z.B. liba.so) neu laden, aber die Adresse der aufgerufenen Funktion (z.B. bar( )) in der neu geladenen liba.so hat sich von 0x7ff8100 (alte gemeinsam genutzte Bibliothek) in 0x7ff9100 (aktualisierte, gemeinsam genutzte Bibliothek) geändert. Da die in dem GOT-Element gespeicherte Adresse nicht der Standardwert (d.h. nicht 0x80000000) in dem typischen System ist, verzweigt das Programm/die Anwendung zu 0x7ff8100, was die ursprüngliche (alte) Ladeadresse von bar() ist, und dies führt dazu, dass ein erneutes Laden der gemeinsam genutzten Bibliothek (z.B. liba.so) in dem typischen System nicht funktioniert. In 7 sind eine oder mehrere Ausführungsformen während der Verwendung der erweiterten GOT 208 (in 5 dargestellt) so konfiguriert, dass sie die gemeinsam genutzte Bibliothek 214 neu laden, ohne die Ausführung des Softwareprogramms/der Softwareanwendung 230 zu stoppen. Da die gemeinsam genutzte Bibliothek 214 aktualisiert wurde, wird der dynamische Linker 212 so konfiguriert, dass er dem DLL-Index des DLL-Indexfeldes 506 „1“ zuweist und das Aufgelöst-Flag der Adresse im Aufgelöst-Flag-Feld 508 des GOT-Eintrags oder -Elements mit WAHR markiert, wie in Aktion 702 dargestellt ist. Auch weist der dynamische Linker 212 die aufgelöste Adresse von bar( ) 0x7ff8100 zu, was in der alten Version (z.B. old libra.so) der gemeinsam genutzten Bibliothek 214 gezeigt ist, und es sei angemerkt, dass die Aktion 705 in diesem Moment auf die alte Adresse (z.B. 0x7ff8100) der gemeinsam genutzten Bibliothek 214 zeigt. Während das Softwareprogramm/die Softwareanwendung 230 ausgeführt wird, wird die gemeinsam genutzte Bibliothek 214 neu geladen oder neu kompiliert. Zum Beispiel ruft der Debugger 240 den dynamischen Linker 212 (z.B. Lader) auf, um die aktualisierte, gemeinsam genutzte Bibliothek 214 (z.B. new liba.so) neu zu laden, indem er einen Befehl, zum Beispiel „reload liba.so“, ausgibt, nachdem die gemeinsam genutzte Bibliothek 214 neu kompiliert wurde. Bei Aktion 704 erhält der Debugger 240 alle abgebildeten GOT-Einträge oder -Elemente (d.h. GOT+0x28), indem er den GOT-Eintrag oder das GOT-Element mit dem DLL-Index „1“ im DLL-Indexfeld 506 abruft, und wenn das Aufgelöst-Flag im Aufgelöst-Flag-Feld 508 WAHR lautet, setzt der Debugger 240 die im Ziel-GOT-Eintrag/-Element (z.B. GOT+0x28) gespeicherte Verbindungsadresse (im Verbindungsadressfeld 504) mit einem Standardwert (d.h. 0x80000000) und das Adresse-aufgelöst-Flag mit FALSCH zurück. Bei Aktion 706 wird der dynamische Linker 212 so konfiguriert, dass er dem DLL-Indexfeld 506 „1“ zuweist und das Adresse-aufgelöst-Flag im Aufgelöst-Flag-Feld 508 für den GOT-Eintrag/das GOT-Element als „WAHR“ markiert und daraufhin die aufgelöste Adresse von bar 0x7ff9100 im Verbindungsadressfeld 504 zuweist, wenn das Symbol bar wieder aufgerufen wird. Die aufgelöste Adresse von bar (d.h. 0x7ff9100) ist die Verbindungsadresse zu der aktualisierten, gemeinsam genutzten Bibliothek 214 (d.h. new liba.so) und nicht der alten gemeinsam genutzten Bibliothek (z.B. old liba.so), und Aktion 708 zeigt auf die aktualisierte, gemeinsam genutzte Bibliothek 214/stellt eine Verbindung zu der aktualisierten, gemeinsam genutzten Bibliothek 214 her. Es sei angemerkt, dass ein beispielhafter Teil des Softwareprogramms/der Softwareanwendung 230 in 7 gezeigt ist und die beispielhafte Funktion (z.B. bar( )) ein Aufruf der Adresse von bar ist. Es sei angemerkt, dass Aktionen, die typische Aktionen/Übergänge für gemeinsam genutzte und dynamische Bibliotheken unter Verwendung der PLT und GOT in den 7 und 8 (wie beispielsweise die Aktionen A bis K) veranschaulichen, nicht beschrieben sind, da diese Aktionen/Übergänge für den Fachmann klar sind.
  • Um weitere Einzelheiten in Bezug auf die Aktion 702 in 7 bereitzustellen, ist 8 ein Blockschaubild, das Linker-Aktionen darstellt, welche durch den dynamischen Linker gemäß einer oder mehreren Ausführungsformen der Erfindung durchgeführt werden. In 8 wird der dynamische Linker 212 bei Aktion 802 so konfiguriert, dass er nach dem Laden der gemeinsam genutzten Bibliothek 214 (z.B. liba.so) die aufgelöste Adresse erhält und die Adresse der aufgerufenen Funktion bar auflöst. Bei Aktion 804 wird der dynamische Linker 212 so konfiguriert, dass er den Inhalt von GOT+0x28 (d.h. den GOT-Eintrag/das GOT-Element) für bar mit 0x7ff8100 im Verbindungsadressfeld 504 aktualisiert. Bei Aktion 806, für den GOT-Eintrag/das GOT-Element, wird der dynamische Linker 212 so konfiguriert, dass er dem DLL-Index „1“ zuweist und das Aufgelöst-Flag im DLL-Indexfeld 506 bzw. im Aufgelöst-Flag-Feld 508 mit WAHR markiert.
  • In Erweiterung der 7 und 8 ist 9 ein Blockschaubild, das ein GOT-Wiederbefüllen gemäß einer oder mehreren Ausführungsformen der Erfindung darstellt. Wie hierin erwähnt wurde, ruft der Debugger 240 den dynamischen Linker 212 (z.B. Lader) auf, um die aktualisierte, gemeinsam genutzte Bibliothek 214 (z.B. liba.so) neu zu laden, indem er einen Befehl (d.h. liba.so neu laden) ausgibt, nachdem die gemeinsam genutzte Bibliothek 214 neu kompiliert wurde, und der dynamische Linker 212 erhält den DLL-Index, indem er den DLL-Index/die DLL-Tabelle 218 durchsucht. Bei Aktion 902 erhält der dynamische Linker 212 alle abgebildeten GOT-Einträge-/Elemente (d.h. GOT+0x28), indem er GOT-Einträge/Elemente mit einem DLL-Index von „1“ in ihrem jeweiligen DLL-Indexfeld 506 abruft. Wenn das Aufgelöst-Flag für den GOT-Eintrag/das GOT-Element in der GOT 208 WAHR lautet, setzt das Wiederbefüllungsmodul 242 (z.B. der Block 304 in 3) die im Ziel-GOT-Eintrag-/Element (z.B. GOT+0x28) gespeicherte Adresse mit dem Standardwert (d.h. 0x80000000) im Verbindungsadressfeld 506 zurück, und es setzt das Aufgelöst-Flag der Adresse im Aufgelöst-Flag-Feld 508 bei Aktion 904 in 9 auf FALSCH zurück.
  • Um die weitere Verwendung der GOT 208 zu veranschaulichen, ist 10 ein Blockschaubild, das weitere Lader-Aktionen gemäß einer oder mehreren Ausführungsformen der Erfindung darstellt. Der dynamische Linker 212 führt den Adressauflösungsprozess durch, um eine neue Adresse aus der neu kompilierten, gemeinsam genutzten Bibliothek 214 zu aktualisieren, wie hierin erläutert wird. Zum Beispiel löst der dynamische Linker 212 bei Aktion 1002 die Adresse der Funktion bar ein weiteres Mal auf, wenn das Softwareprogramm/die Softwareanwendung 230 bar () erneut aufruft, da es sich bei der in GOT+0X28 gespeicherten Adresse um den Standardwert 0x8000000 handelt. Bei Aktion 1004 aktualisiert der dynamische Linker 212 die Verbindungsadresse von GOT+0x28 mit der neuen bar-Adresse 0x7ff910, weist dem DLL-Index „1“ zu und markiert das Aufgelöst-Flag in dem GOT-Eintrag/-Element als WAHR. Die alte Adresse (0x7ff8100) für die gemeinsam genutzte Bibliothek 214 wurde auf die neue Adresse (d.h. die neue Verbindungsadresse 0x7ff9100) in dem GOT-Eintrag/-Element der GOT 208 aktualisiert. Das Indexfeld kann den Wert „-1“ haben, wobei „-1“ der Anfangswert des Bibliotheksindexfeldes ist. Das Indexfeld kann den Wert „1“ haben, was bedeutet, dass der Bibliotheksindex 218, d.h. der Bibliotheksindex von liba.so, „1“ lautet.
  • Zur Veranschaulichung, wobei die aktualisierte GOT 208 und die PTL verwendet werden, ist 11 ein Blockschaubild, das eine direkte Verzweigung zu der neuen Adresse (z.B. der neuen Adresse 324 im Verbindungsadressfeld 504) darstellt, wenn die Funktion gemäß einer oder mehreren Ausführungsformen der Erfindung anschließend aufgerufen wird. Bei Aktion 1102 wird das Softwareprogramm/die Softwareanwendung 230 kompiliert und die PLT wird verwendet, um positionsunabhängige Funktionsaufrufe an absolute Positionen umzuleiten. Bei Aktion 1104 springt die Anweisung „b @GOT+OX28“ direkt zu 0x7ff9100, wenn bar ( ) (später) erneut aufgerufen wird, da der in GOT+OX28 gespeicherte Wert die neue Adresse 0x7ff9100 ist.
  • Zu technischen Vorteilen und Vorzügen gehören eine oder mehrere Ausführungsformen, die die Ausführung des Softwareprogramms/der Softwareanwendung und/oder des Debuggingprozesses fortsetzen, wenn dynamische Bibliotheken aktualisiert werden, d.h. ohne das Softwareprogramm/die Softwareanwendung oder den Debuggingprozess zu stoppen. Dadurch, dass man die Ausführung des Softwareprogramms/der Softwareanwendung nicht stoppen, anhalten oder unterbrechen muss, wird die Leistung nicht beeinträchtigt, da gemäß einer oder mehreren Ausführungsformen eine Erzeugung von zusätzlichen Anweisungen durch den statischen Linker nicht erforderlich ist und keine zusätzlichen Maßnahmen durch den dynamischen Linker (z.B. Lader) ergriffen werden. Zu weiteren technischen Vorteilen und Vorzügen gehören, dass Softwareprogrammierer während der Entwicklung/des Testens der Softwareprogramme/der Softwareanwendungen und während des Aufspürens der Fehlerursache, insbesondere bei komplizierten Szenarien, weniger Zeit und Mühe aufwenden müssen und dem Softwareprogrammierer gleichzeitig ein flexibleres Verfahren zum Testen und Debugging bereitgestellt wird.
  • 12 ist ein Ablaufplan eines Verfahrens 1200 zum Durchführen eines erneuten Ladens einer aktualisierten, gemeinsam genutzten Bibliothek, ohne die Ausführung des Softwareprogramms/der Softwareanwendung 230 zu stoppen, gemäß einer oder mehreren Ausführungsformen der Erfindung. Am Block 1202 wird der Debugger 240 über den Prozessor 101 so konfiguriert, dass er ein Softwareprogramm/eine Softwareanwendung 230 ausführt, das bzw. die einen Funktionsaufruf (z.B. bar ( )) einer gemeinsam genutzten Bibliothek 214 erfordert, und/oder die Ausführung des Softwareprogramms/der Softwareanwendung 230 veranlasst. Am Block 1204 wird der Debugger 240 so konfiguriert, dass er die gemeinsam genutzte Bibliothek 214 neu lädt und/oder den dynamischen Linker 212 dazu veranlasst, die gemeinsam genutzte Bibliothek 214 neu zu laden, ohne die Ausführung des Softwareprogramms/der Softwareanwendung 230 zu stoppen, wobei die gemeinsam genutzte Bibliothek 214 im Anschluss an die Ausführung des Softwareprogramms aktualisiert wurde. Am Block 1206 wird der Debugger 240 so konfiguriert, dass er eine globale Offsettabelle (GOT) 208 als Reaktion auf ein Auflösen einer zu dem Funktionsaufruf gehörenden Verbindungsadresse aktualisiert, wobei ein Eintrag in der GOT 208 ein Verbindungsadressfeld 504, ein Indexfeld 506 und ein Aufgelöst-Flag-Feld 508 umfasst, wobei das Aktualisieren ein Aktualisieren des Indexfeldes mit einem positiven Wert (z.B. „1“) und ein Markieren des Aufgelöst-Feldes mit einem positiven Flag (z.B. WAHR) für den Eintrag in der GOT 208 umfasst. Am Block 1208 wird der Debugger 240 so konfiguriert, dass er als Reaktion auf ein erneutes Laden der gemeinsam genutzten Bibliothek 214, ohne die Ausführung des Softwareprogramms/der Softwareanwendung 230 zu stoppen, den Eintrag in der GOT 208, der über den positiven Wert (z.B. „1“) in dem Indexfeld und das positive Flag (z.B. WAHR) in dem Aufgelöst-Feld verfügt, findet und/oder den dynamischen Linker 212 dazu veranlasst, ihn zu finden. Am Block 1210 wird der Debugger 240 so konfiguriert, dass er als Reaktion auf eine nachfolgende Ausführung des Funktionsaufrufs der gemeinsam genutzten Bibliothek 214 einen Adresswert in dem Verbindungsadressfeld für den Eintrag, der über den positiven Wert in dem Indexfeld verfügt, zurückgibt und/oder den dynamischen Linker 212 dazu veranlasst, ihn zurückzugeben.
  • Vor dem Aktualisieren der GOT 208 wird das Verbindungsadressfeld auf einen Standardwert (z.B. 0x80000000) gesetzt. Vor dem Aktualisieren der GOT 208 wird das Aufgelöst-Feld mit einem nicht positiven Wert (z.B. FALSCH) markiert, wenn das Aufgelöst-Feld zuvor den positiven Wert (z.B. WAHR) enthalten hat. Das erneute Laden der gemeinsam genutzten Bibliothek 214, ohne die Ausführung des Softwareprogramms/der Softwareanwendung 230 zu stoppen, umfasst ein Auflösen einer neuen Adresse (z.B. 0x7ff9100) für die gemeinsam genutzte Bibliothek 214, die aktualisiert wurde. Das Aktualisieren der GOT 208 umfasst ein Ersetzen des Standardwerts durch die neue Adresse in dem Verbindungsadressfeld, nachdem die neue Adresse aufgelöst wurde. Der Adresswert in dem Verbindungsadressfeld ist die neue Adresse, welche für die gemeinsam genutzte Bibliothek 214 aufgelöst wurde. Die gemeinsam genutzte Bibliothek 214 wird vor dem erneuten Laden der gemeinsam genutzten Bibliothek 214 erstmalig/zuvor für den Funktionsaufruf der gemeinsam genutzten Bibliothek während des Ausführens des Softwareprogramms/der Softwareanwendung 230 geladen.
  • 13 ist ein Ablaufplan eines Verfahrens 1300 zum Durchführen eines erneuten Ladens einer aktualisierten, gemeinsam genutzten Bibliothek, ohne die Ausführung des Softwareprogramms/der Softwareanwendung 230 zu stoppen, gemäß einer oder mehreren Ausführungsformen der Erfindung. Am Block 1302 wird der Debugger 240 so konfiguriert, dass er eine gemeinsam genutzte Bibliothek 214 neu lädt und/oder den dynamischen Linker 212 dazu veranlasst, eine gemeinsam genutzte Bibliothek 214 neu zu laden, ohne die Ausführung eines Softwareprogramms/einer Softwareanwendung 230 zu stoppen, das bzw. die die gemeinsam genutzte Bibliothek 214 aufruft. Am Block 1304 wird der Debugger 240 so konfiguriert, dass er als Reaktion auf ein Auflösen einer Verbindungsadresse (z.B. für das Verbindungsadressfeld 504) zu der gemeinsam genutzten Bibliothek 214 ein Indexfeld (z.B. das DLL-Indexfeld 506) mit einem positiven Wert (z.B. „1“) aktualisiert und ein Aufgelöst-Feld (z.B. das Aufgelöst-Flag-Feld 508) mit einem positiven Flag (z.B. WAHR) für einen Eintrag in einer globalen Offsettabelle (GOT) markiert. Am Block 1306 wird der Debugger 240 so konfiguriert, dass er als Reaktion auf ein erneutes Laden der gemeinsam genutzten Bibliothek, ohne die Ausführung des Softwareprogramms zu stoppen, den Eintrag in der GOT 208 findet, der über die für die gemeinsam genutzte Bibliothek 214 aufgelöste Verbindungsadresse verfügt.
  • Es sei von vornherein klargestellt, dass das Umsetzen der hierin angeführten Lehren nicht auf eine Cloud-Computing-Umgebung beschränkt ist, obwohl diese Offenbarung eine ausführliche Beschreibung von Cloud-Computing umfasst. Stattdessen können Ausführungsformen der vorliegenden Erfindung gemeinsam mit jeder beliebigen weiteren Art von jetzt bekannter oder später erfundener Datenverarbeitungsumgebung umgesetzt werden.
  • Cloud-Computing ist ein Servicebereitstellungsmodell zum Ermöglichen eines problemlosen bedarfsgesteuerten Netzwerkzugriffs auf einen gemeinsam genutzten Pool von konfigurierbaren Datenverarbeitungsressourcen (z.B. Netzwerken, Netzwerkbandbreite, Servern, Verarbeitung, Arbeitsspeichern, Speichern, Anwendungen, virtuellen Maschinen und Services), die mit minimalem Verwaltungsaufwand bzw. minimaler Interaktion mit einem Anbieter des Service schnell bereitgestellt und freigegeben werden können. Dieses Cloud-Modell kann mindestens fünf Eigenschaften umfassen, mindestens drei Dienstmodelle und mindestens vier Implementierungsmodelle.
  • Bei den Eigenschaften handelt es sich um die folgenden:
    • On-Demand Self-Service: Ein Cloud-Nutzer kann einseitig automatisch nach Bedarf für Datenverarbeitungsfunktionen wie Serverzeit und Netzwerkspeicher sorgen, ohne dass eine menschliche Interaktion mit dem Anbieter der Dienste erforderlich ist.
    • Broad Network Access: Es sind Funktionen über ein Netzwerk verfügbar, auf die durch Standardmechanismen zugegriffen wird, welche die Verwendung durch heterogene Thin- oder Thick-Client-Plattformen (z.B. Mobiltelefone, Laptops und PDAs) unterstützen.
    • Resource-Pooling: Die Datenverarbeitungsressourcen des Anbieters werden zusammengeschlossen, um mehreren Nutzern unter Verwendung eines Multi-Tenant-Modells zu dienen, wobei verschiedene physische und virtuelle Ressourcen dynamisch nach Bedarf zugewiesen und neu zugewiesen werden. Es gibt eine gefühlte Standortunabhängigkeit, da der Nutzer allgemein keine Kontrolle bzw. Kenntnis über den genauen Standort der bereitgestellten Ressourcen hat, aber in der Lage sein kann, einen Standort auf einer höheren Abstraktionsebene festzulegen (z.B. Land, Staat oder Rechenzentrum).
    • Rapid Elasticity: Funktionen können für eine schnelle horizontale Skalierung (scale out) schnell und elastisch bereitgestellt werden, in einigen Fällen auch automatisch, und für ein schnelles Scale-in schnell freigegeben werden. Für den Nutzer erscheinen die für das Bereitstellen verfügbaren Funktionen häufig unbegrenzt und sie können jederzeit in jeder beliebigen Menge gekauft werden.
    • Measured Service: Cloud-Systeme steuern und optimieren die Verwendung von Ressourcen automatisch, indem sie eine Messfunktion auf einer gewissen Abstraktionsebene nutzen, die für die Art von Dienst geeignet ist (z.B. Speicher, Verarbeitung, Bandbreite sowie aktive Benutzerkonten). Die Nutzung von Ressourcen kann überwacht, gesteuert und gemeldet werden, wodurch sowohl für den Anbieter als auch für den Nutzer des verwendeten Dienstes Transparenz geschaffen wird.
  • Bei den Servicemodellen handelt es sich um die folgenden:
    • Software as a Service (SaaS): Die dem Nutzer bereitgestellte Funktion besteht darin, die in einer Cloud-Infrastruktur laufenden Anwendungen des Anbieters zu verwenden. Die Anwendungen sind über eine Thin-Client-Schnittstelle wie einen Web-Browser (z.B. auf dem Web beruhende E-Mail) von verschiedenen Client-Einheiten her zugänglich. Der Nutzer verwaltet bzw. steuert die zugrunde liegende Cloud-Infrastruktur nicht, darunter das Netzwerk, Server, Betriebssysteme, Speicher bzw. sogar einzelne Anwendungsfunktionen, mit der möglichen Ausnahme von eingeschränkten benutzerspezifischen Anwendungskonfigurationseinstellungen.
    • Platform as a Service (PaaS): Die dem Nutzer bereitgestellte Funktion besteht darin, durch einen Nutzer erstellte bzw. erhaltene Anwendungen, die unter Verwendung von durch den Anbieter unterstützten Programmiersprachen und Tools erstellt wurden, in der Cloud-Infrastruktur einzusetzen. Der Nutzer verwaltet bzw. steuert die zugrunde liegende Cloud-Infrastruktur nicht, darunter Netzwerke, Server, Betriebssysteme bzw. Speicher, hat aber die Kontrolle über die eingesetzten Anwendungen und möglicherweise über Konfigurationen des Application Hosting Environment.
    • Infrastructure as a Service (laaS): Die dem Nutzer bereitgestellte Funktion besteht darin, das Verarbeiten, Speicher, Netzwerke und andere grundlegende Datenverarbeitungsressourcen bereitzustellen, wobei der Nutzer in der Lage ist, beliebige Software einzusetzen und auszuführen, zu der Betriebssysteme und Anwendungen gehören können. Der Nutzer verwaltet bzw. steuert die zugrunde liegende Cloud-Infrastruktur nicht, hat aber die Kontrolle über Betriebssysteme, Speicher, eingesetzte Anwendungen und möglicherweise eine eingeschränkte Kontrolle über ausgewählte Netzwerkkomponenten (z.B. Host-Firewalls).
  • Bei den Einsatzmodellen handelt es sich um die folgenden:
    • Private Cloud: Die Cloud-Infrastruktur wird einzig und allein für eine Organisation betrieben. Sie kann durch die Organisation oder einen Dritten verwaltet werden und kann sich in den eigenen Räumen oder in fremden Räumen befinden.
    • Community Cloud: Die Cloud-Infrastruktur wird von mehreren Organisationen gemeinsam genutzt und unterstützt eine spezielle Benutzergemeinschaft, die gemeinsame Angelegenheiten hat (z.B. Mission, Sicherheitsanforderungen, Richtlinien sowie Überlegungen bezüglich der Einhaltung von Vorschriften). Sie kann durch die Organisationen oder einen Dritten verwaltet werden und kann sich in den eigenen Räumen oder in fremden Räumen befinden.
    • Public Cloud: Die Cloud-Infrastruktur wird der allgemeinen Öffentlichkeit oder einer großen Industriegruppe zur Verfügung gestellt und sie gehört einer Cloud-Dienste verkaufenden Organisation.
    • Hybrid Cloud: Die Cloud-Infrastruktur ist eine Zusammensetzung aus zwei oder mehreren Clouds (privat, Benutzergemeinschaft oder öffentlich), die zwar einzelne Einheiten bleiben, aber durch eine standardisierte oder proprietäre Technologie miteinander verbunden sind, die Daten- und Anwendungsportierbarkeit ermöglicht (z.B. Cloud-Zielgruppenverteilung für den Lastenausgleich zwischen Clouds).
  • Eine Cloud-Computing-Umgebung ist dienstorientiert mit Fokus auf Statusunabhängigkeit, geringer Kopplung, Modularität und semantischer Interoperabilität. Im Herzen von Cloud-Computing liegt eine Infrastruktur, die ein Netzwerk aus zusammengeschalteten Knoten umfasst.
  • Unter Bezugnahme auf 14 ist eine veranschaulichende Cloud-Computing-Umgebung 50 dargestellt. Wie gezeigt ist, umfasst die Cloud-Computing-Umgebung 50 einen oder mehrere Cloud-Computing-Knoten 10, mit denen von Cloud-Nutzern verwendete lokale Datenverarbeitungseinheiten wie beispielsweise ein elektronischer Assistent (PDA, personal digital assistant) oder ein Mobiltelefon 54A, ein Desktop-Computer 54B, ein Laptop-Computer 54C und/oder ein Automobil-Computer-System 54N Daten austauschen können. Die Knoten 10 können miteinander Daten austauschen. Sie können physisch oder virtuell in ein oder mehrere Netzwerke wie private, Benutzergemeinschafts-, öffentliche oder hybride Clouds gruppiert werden (nicht gezeigt), wie vorstehend beschrieben wurde, oder in eine Kombination daraus. Dies ermöglicht es der Cloud-Computing-Umgebung 50, Infrastruktur, Plattformen und/oder Software als Dienste anzubieten, für die ein Cloud-Nutzer keine Ressourcen auf einer lokalen Datenverarbeitungseinheit vorhalten muss. Es sei darauf hingewiesen, dass die Arten der in 14 gezeigten Datenverarbeitungseinheiten 54A bis N lediglich veranschaulichend sein sollen und dass die Datenverarbeitungsknoten 10 und die Cloud-Computing-Umgebung 50 über eine beliebige Art Netzwerk und/oder über eine beliebige Art von über ein Netzwerk aufrufbarer Verbindung (z.B. unter Verwendung eines Web-Browsers) mit einer beliebigen Art von computergestützter Einheit Daten austauschen können.
  • Unter Bezugnahme auf 15 ist ein Satz von funktionalen Abstraktionsschichten gezeigt, die von der Cloud-Computing-Umgebung 50 (14) bereitgestellt werden. Es sollte von vornherein klar sein, dass die in 15 gezeigten Komponenten, Schichten und Funktionen lediglich veranschaulichend sein sollen und Ausführungsformen der Erfindung nicht darauf beschränkt sind. Wie dargestellt ist, werden die folgenden Schichten und entsprechenden Funktionen bereitgestellt:
  • Eine Hardware- und Softwareschicht 60 umfasst Hardware- und Softwarekomponenten. Zu Beispielen für Hardwarekomponenten gehören: Mainframe-Computer 61; auf der RISC- (Reduced Instruction Set Computer) Architektur beruhende Server 62; Server 63; Blade-Server 64; Speichereinheiten 65; und Netzwerke sowie Netzwerkkomponenten 66. In einigen Ausführungsformen umfassen Softwarekomponenten eine Netzwerk-Anwendungsserver-Software 67 und eine Datenbanksoftware 68.
  • Eine Virtualisierungsschicht 70 stellt eine Abstraktionsschicht bereit, aus der die folgenden Beispiele für virtuelle Einheiten bereitgestellt werden können: virtuelle Server 71; virtueller Speicher 72; virtuelle Netzwerke 73, darunter virtuelle private Netzwerke; virtuelle Anwendungen und Betriebssysteme 74; und virtuelle Clients 75.
  • In einem Beispiel kann eine Verwaltungsschicht 80 die nachstehend beschriebenen Funktionen bereitstellen. Eine Ressourcen-Bereitstellung 81 stellt die dynamische Beschaffung von Datenverarbeitungsressourcen sowie anderen Ressourcen bereit, die zum Durchführen von Aufgaben innerhalb der Cloud-Computing-Umgebung verwendet werden. Ein Messen und eine Preisfindung 82 stellen die Kostenverfolgung beim Verwenden von Ressourcen innerhalb der Cloud-Computing-Umgebung sowie die Abrechnung oder Rechnungsstellung für den Verbrauch dieser Ressourcen bereit. In einem Beispiel können diese Ressourcen Anwendungssoftwarelizenzen umfassen. Eine Sicherheit stellt die Identitätsüberprüfung für Cloud-Nutzer und Aufgaben sowie Schutz für Daten und andere Ressourcen bereit. Ein Benutzerportal 83 stellt Nutzern und Systemadministratoren den Zugang zu der Cloud-Computing-Umgebung bereit. Eine Verwaltung des Dienstumfangs 84 stellt die Zuordnung und Verwaltung von Cloud-Computing-Ressourcen bereit, so dass die benötigten Dienstziele erreicht werden. Ein Planen und Erfüllen von Vereinbarungen zum Dienstumfang (SLA, Service Level Agreement) 85 stellt die Anordnung vorab und die Beschaffung von Cloud-Computing-Ressourcen, für die eine zukünftige Anforderung vorausgesehen wird, gemäß einem SLA bereit.
  • Eine Arbeitslastschicht 90 stellt Beispiele für die Funktionalität bereit, für welche die Cloud-Computing-Umgebung verwendet werden kann. Zu Beispielen für Arbeitslasten und Funktionen, die von dieser Schicht bereitgestellt werden können, gehören: Abbildung und Navigation 91; Software-Entwicklung und Lebenszyklusverwaltung 92; Bereitstellung von Ausbildung in virtuellen Klassenzimmern 93; Datenanalytikverarbeitung 94; Transaktionsverarbeitung 95; und Softwareanwendungen 96 (z.B. ein(e) Softwareprogramm/-anwendung 230, ein Debugger 240, ein statischer Linker 210, ein dynamischer Linker 212 und ein Wiederbefüllungsmodul 242). Auch können Softwareanwendungen mit der Ressourcen-Bereitstellung 81 funktionieren und/oder in die Ressourcen-Bereitstellung 81 integriert sein.
  • Verschiedene Ausführungsformen der Erfindung werden hierin unter Bezugnahme auf die zugehörigen Zeichnungen beschrieben. Alternative Ausführungsformen der Erfindung können ersonnen werden, ohne vom Umfang dieser Erfindung abzuweichen. Verschiedene Verbindungen und Positionsbeziehungen (z.B. über, unter, neben usw.) werden in der folgenden Beschreibung und in den Zeichnungen zwischen Elementen angegeben. Diese Verbindungen und/oder Positionsbeziehungen können, sofern nichts anderes angegeben ist, direkt oder indirekt sein, und die vorliegende Erfindung soll diesbezüglich nicht einschränkend sein. Folglich kann sich eine Kopplung von Entitäten entweder auf eine direkte oder eine indirekte Kopplung beziehen und bei einer Positionsbeziehung zwischen Entitäten kann es sich um eine direkte oder indirekte Positionsbeziehung handeln. Überdies können die verschiedenen hierin beschriebenen Aufgaben und Prozessschritte in eine umfassendere Prozedur oder einen umfassenderen Prozess eingebunden werden, die bzw. der über zusätzliche Schritte oder Funktionalität verfügt, welche hierin nicht ausführlich beschrieben sind/ist.
  • Eine oder mehrere der hierin beschriebenen Verfahren können mit beliebigen oder einer Kombination der folgenden Technologien ausgeführt werden, die in der Technik jeweils hinlänglich bekannt sind: (einer) diskreten Logikschaltung(en) mit Logikgattern, um Logikfunktionen an Datensignalen auszuführen, einer anwendungsspezifischen integrierten Schaltung (ASIC, application specific integrated circuit) mit entsprechenden kombinatorischen Logikgattern, (einer) programmierbaren Gatter-Anordnung(en) (PGA, programmable gate array), einer im Feld programmierbaren Gatter-Anordnung (FPGA, field programmable gate array) usw.
  • Der Kürze halber werden herkömmliche Techniken in Bezug auf das Herstellen und Verwenden von Aspekten der Erfindung gegebenenfalls hierin ausführlich beschrieben oder auch nicht beschrieben. Insbesondere sind verschiedene Aspekte von Datenverarbeitungssystemen und bestimmten Computerprogrammen zur Ausführung der verschiedenen hierin beschriebenen technischen Merkmale hinlänglich bekannt. Folglich werden viele herkömmliche Ausführungsdetails aus Gründen der Übersichtlichkeit hierin nur kurz erwähnt oder ganz weggelassen, ohne die hinlänglich bekannten Einzelheiten des Systems und/oder des Prozesses anzugeben.
  • In einigen Ausführungsformen können verschiedene Funktionen oder Vorgänge an einem bestimmten Ort und/oder in Verbindung mit dem Betrieb von einer oder mehreren Vorrichtungen oder Systemen stattfinden. In einigen Ausführungsformen kann ein Teil einer bestimmten Funktion oder eines bestimmten Vorgangs an einer ersten Einheit oder an einem ersten Ort durchgeführt werden und die restliche Funktion oder der restliche Vorgang kann an einer/einem oder mehreren zusätzlichen Einheiten oder Orten durchgeführt werden.
  • Die hierin verwendete Terminologie dient lediglich dazu, bestimmte Ausführungsformen zu beschreiben, und ist nicht als einschränkend zu verstehen. In der Verwendung hierin sollen die Singular-Formen „ein“, „eine“ und „der“, „die“, „das“ auch die Pluralformen umfassen, sofern der Kontext nicht eindeutig etwas anderes angibt. Es wird des Weiteren darauf hingewiesen, dass die Begriffe „aufweist“ und/oder „aufweisend“, wenn sie in dieser Spezifikation verwendet werden, das Vorhandensein von angegebenen Merkmalen, ganzen Zahlen, Schritten, Operationen, Elementen und/oder Komponenten bezeichnen, das Vorhandensein oder das Hinzufügen von einem oder mehreren anderen/weiteren Merkmalen, ganzen Zahlen, Schritten, Operationen, Elementkomponenten und/oder Gruppen davon jedoch nicht ausschließen.
  • Die entsprechenden Strukturen, Materialien, Vorgänge und Äquivalente von allen Mitteln oder Schritt-plus-Funktion-Elementen (step plus function elements) in den nachstehenden Ansprüchen sollen jedwede Struktur, jedwedes Material oder jedweden Vorgang zur Durchführung der Funktion in Kombination mit anderen beanspruchten Elementen, die im Einzelnen beansprucht werden, umfassen. Die vorliegende Offenbarung erfolgte zum Zweck der Veranschaulichung und Beschreibung, sie soll aber weder erschöpfend noch auf die offenbarte Form beschränkt sein. Viele Modifikationen und Varianten sind für den Fachmann erkennbar, ohne vom Umfang der Offenbarung abzuweichen. Die Ausführungsformen wurden gewählt und beschrieben, um die Grundgedanken der Offenbarung und die praktische Anwendung bestmöglich zu erklären und um anderen Fachleuten das Verständnis der Offenbarung hinsichtlich verschiedener Ausführungsformen mit verschiedenen Modifikationen, wie sie für die jeweilige vorgesehene Verwendung geeignet sind, zu ermöglichen.
  • Die hierin dargestellten Schaubilder dienen der Veranschaulichung. An dem Schaubild oder den darin beschriebenen Schritten (oder Operationen) können viele Änderungen vorgenommen werden, ohne vom Umfang der Offenbarung abzuweichen. Zum Beispiel können die Aktionen in einer abweichenden Reihenfolge durchgeführt werden oder Aktionen können hinzugefügt, gelöscht oder modifiziert werden. Auch beschreibt der Begriff „gekoppelt“ das Vorhandensein eines Signalpfads zwischen zwei Elementen und er schließt keine direkte Verbindung zwischen den Elementen ohne dazwischenliegende Elemente/Verbindungen ein. All diese Varianten werden als ein Teil der vorliegenden Offenbarung betrachtet.
  • Die folgenden Definitionen und Abkürzungen sind für die Interpretation der Ansprüche und der Spezifikation zu verwenden. In der Verwendung hierin sollen die Begriffe „weist auf“, „aufweisend“, „umfasst“, „umfassend“, „hat“, „verfügend über“, „enthält“ oder „enthaltend“ oder eine beliebige andere Variante davon eine nicht ausschließliche Einbeziehung abdecken. Zum Beispiel ist eine Komposition, eine Mischung, ein Prozess, ein Verfahren, ein Artikel oder eine Vorrichtung, die bzw. der eine Liste von Elementen aufweist, nicht unbedingt auf nur diese Elemente beschränkt, sondern kann andere Elemente umfassen, die nicht ausdrücklich aufgeführt oder einer/einem solchen Komposition, Mischung, Prozess, Verfahren, Artikel oder Vorrichtung inhärent sind.
  • Zusätzlich wird der Begriff „beispielhaft“ hierin in der Bedeutung von „als ein Beispiel, ein Fall oder eine Veranschaulichung dienend“ verwendet. Jede hierin als „beispielhaft“ beschriebene Ausführungs- oder Gestaltungsform ist nicht unbedingt als bevorzugt oder vorteilhaft gegenüber anderen Ausführungs- oder Gestaltungsformen auszulegen. Die Begriffe „mindestens ein(e)“ und „ein(e) oder mehrere“ sollen jede ganze Zahl umfassen, die größer oder gleich eins ist, d.h. eins, zwei, drei, vier usw. Die Begriffe „eine Mehrzahl“ sollen jede ganze Zahl umfassen, die größer oder gleich zwei ist, d.h. zwei, drei, vier, fünf usw. Der Begriff „Verbindung“ kann sowohl eine indirekte „Verbindung“ als auch eine direkte „Verbindung“ umfassen.
  • Die Begriffe „circa“, „weitgehend“, „ungefähr“ und Varianten davon sollen den Fehlergrad umfassen, der mit der Messung der jeweiligen Menge basierend auf dem zum Zeitpunkt der Einreichung der Anmeldung verfügbaren Gerät verbunden ist. Zum Beispiel kann „ungefähr“ einen Bereich von ± 8 % oder 5 % oder 2 % eines bestimmten Werts umfassen.
  • Bei der vorliegenden Erfindung kann es sich um ein System, ein Verfahren und/oder ein Computerprogrammprodukt auf jeder möglichen Integrationsstufe technischer Details handeln. Das Computerprogrammprodukt kann ein durch einen Computer lesbares Speichermedium (oder -medien) mit durch einen Computer lesbaren Programmanweisungen darauf umfassen, um einen Prozessor dazu zu veranlassen, Aspekte der vorliegenden Erfindung auszuführen.
  • Bei dem durch einen Computer lesbaren Speichermedium kann es sich um eine physische Einheit handeln, die Anweisungen zur Verwendung durch ein System zur Ausführung von Anweisungen behalten und speichern kann. Bei dem durch einen Computer lesbaren Speichermedium kann es sich zum Beispiel um eine elektronische Speichereinheit, eine magnetische Speichereinheit, eine optische Speichereinheit, eine elektromagnetische Speichereinheit, eine Halbleiterspeichereinheit oder jede geeignete Kombination daraus handeln, ohne auf diese beschränkt zu sein. Zu einer nicht erschöpfenden Liste spezifischerer Beispiele des durch einen Computer lesbaren Speichermediums gehören die folgenden: eine auswechselbare Computerdiskette, eine Festplatte, ein Direktzugriffsspeicher (RAM), ein Nur-Lese-Speicher (ROM), ein löschbarer programmierbarer Nur-Lese-Speicher (EPROM bzw. Flash-Speicher), ein statischer Direktzugriffsspeicher (SRAM), ein auswechselbarer Kompaktspeicherplatte-Nur-Lese-Speicher (CD-ROM), eine DVD (digital versatile disc), ein Speicher-Stick, eine Diskette, eine mechanisch kodierte Einheit wie zum Beispiel Lochkarten oder erhabene Strukturen in einer Rille, auf denen Anweisungen gespeichert sind, und jede geeignete Kombination daraus. Ein durch einen Computer lesbares Speichermedium soll in der Verwendung hierin nicht als flüchtige Signale an sich aufgefasst werden, wie zum Beispiel Funkwellen oder andere sich frei ausbreitende elektromagnetische Wellen, elektromagnetische Wellen, die sich durch einen Wellenleiter oder ein anderes Übertragungsmedium ausbreiten (z.B. Lichtwellenleiterkabel durchlaufende Lichtimpulse) oder durch einen Draht übermittelte elektrische Signale.
  • Hierin beschriebene, durch einen Computer lesbare Programmanweisungen können von einem durch einen Computer lesbaren Speichermedium auf jeweilige Datenverarbeitungs-/Verarbeitungseinheiten oder über ein Netzwerk wie zum Beispiel das Internet, ein lokales Netzwerk, ein Weitverkehrsnetz und/oder ein drahtloses Netzwerk auf einen externen Computer oder eine externe Speichereinheit heruntergeladen werden. Das Netzwerk kann Kupferübertragungskabel, Lichtwellenübertragungsleiter, drahtlose Übertragung, Leitwegrechner, Firewalls, Switches, Gateway-Computer und/oder Edge-Server aufweisen. Eine Netzwerkadapterkarte oder Netzwerkschnittstelle in jeder Datenverarbeitungs-/Verarbeitungseinheit empfängt durch einen Computer lesbare Programmanweisungen aus dem Netzwerk und leitet die durch einen Computer lesbaren Programmanweisungen zur Speicherung in einem durch einen Computer lesbaren Speichermedium innerhalb der entsprechenden Datenverarbeitungs-/Verarbeitungseinheit weiter.
  • Bei durch einen Computer lesbaren Programmanweisungen zum Ausführen von Arbeitsschritten der vorliegenden Erfindung kann es sich um Assembler-Anweisungen, ISA-Anweisungen (Instruction-Set-Architecture), Maschinenanweisungen, maschinenabhängige Anweisungen, Mikrocode, Firmwareanweisungen, zustandssetzende Daten, Konfigurationsdaten für eine integrierte Schaltung oder entweder Quellcode oder Objektcode handeln, die in einer beliebigen Kombination aus einer oder mehreren Programmiersprachen geschrieben werden, darunter objektorientierte Programmiersprachen wie Smalltalk, C++ o.ä. sowie prozedurale Programmiersprachen wie die Programmiersprache „C“ oder ähnliche Programmiersprachen. Die durch einen Computer lesbaren Programmanweisungen können vollständig auf dem Computer des Benutzers, teilweise auf dem Computer des Benutzers, als eigenständiges Software-Paket, teilweise auf dem Computer des Benutzers und teilweise auf einem fernen Computer oder vollständig auf dem fernen Computer oder Server ausgeführt werden. In letzterem Fall kann der entfernt angeordnete Computer mit dem Computer des Benutzers durch einen beliebigen Typ Netzwerk verbunden sein, darunter ein lokales Netzwerk (LAN) oder ein Weitverkehrsnetz (WAN), oder die Verbindung kann mit einem externen Computer hergestellt werden (zum Beispiel durch das Internet unter Verwendung eines Internet-Dienstanbieters). In einigen Ausführungsformen können elektronische Schaltungen, darunter zum Beispiel programmierbare Logikschaltungen, vor Ort programmierbare Gatter-Anordnungen (FPGA, field-programmable gate arrays) oder programmierbare Logikanordnungen (PLA, programmable logic arrays) die durch einen Computer lesbaren Programmanweisungen ausführen, indem sie Zustandsinformationen der durch einen Computer lesbaren Programmanweisungen nutzen, um die elektronischen Schaltungen zu personalisieren, um Aspekte der vorliegenden Erfindung durchzuführen.
  • Aspekte der vorliegenden Erfindung sind hierin unter Bezugnahme auf Ablaufpläne und/oder Blockschaltbilder bzw. Schaubilder von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß Ausführungsformen der Erfindung beschrieben. Es wird darauf hingewiesen, dass jeder Block der Ablaufpläne und/oder der Blockschaltbilder bzw. Schaubilder sowie Kombinationen von Blöcken in den Ablaufplänen und/oder den Blockschaltbildern bzw. Schaubildern mittels durch einen Computer lesbare Programmanweisungen ausgeführt werden können.
  • Diese durch einen Computer lesbaren Programmanweisungen können einem Prozessor eines Universalcomputers, eines Spezialcomputers oder einer anderen programmierbaren Datenverarbeitungsvorrichtung bereitgestellt werden, um eine Maschine zu erzeugen, so dass die über den Prozessor des Computers bzw. der anderen programmierbaren Datenverarbeitungsvorrichtung ausgeführten Anweisungen ein Mittel zur Umsetzung der in dem Block bzw. den Blöcken der Ablaufpläne und/oder der Blockschaltbilder bzw. Schaubilder festgelegten Funktionen/Schritte erzeugen. Diese durch einen Computer lesbaren Programmanweisungen können auch auf einem durch einen Computer lesbaren Speichermedium gespeichert sein, das einen Computer, eine programmierbare Datenverarbeitungsvorrichtung und/oder andere Einheiten so steuern kann, dass sie auf eine bestimmte Art funktionieren, so dass das durch einen Computer lesbare Speichermedium, auf dem Anweisungen gespeichert sind, ein Herstellungsprodukt aufweist, darunter Anweisungen, welche Aspekte der/des in dem Block bzw. den Blöcken des Ablaufplans und/oder der Blockschaltbilder bzw. Schaubilder angegebenen Funktion/Schritts umsetzen.
  • Die durch einen Computer lesbaren Programmanweisungen können auch auf einen Computer, eine andere programmierbare Datenverarbeitungsvorrichtung oder eine andere Einheit geladen werden, um das Ausführen einer Reihe von Prozessschritten auf dem Computer bzw. der anderen programmierbaren Vorrichtung oder anderen Einheit zu verursachen, um einen auf einem Computer ausgeführten Prozess zu erzeugen, so dass die auf dem Computer, einer anderen programmierbaren Vorrichtung oder einer anderen Einheit ausgeführten Anweisungen die in dem Block bzw. den Blöcken der Ablaufpläne und/oder der Blockschaltbilder bzw. Schaubilder festgelegten Funktionen/Schritte umsetzen.
  • Die Ablaufpläne und die Blockschaltbilder bzw. Schaubilder in den Figuren veranschaulichen die Architektur, die Funktionalität und den Betrieb möglicher Ausführungen von Systemen, Verfahren und Computerprogrammprodukten gemäß verschiedenen Ausführungsformen der vorliegenden Erfindung. In diesem Zusammenhang kann jeder Block in dem Ablaufplan oder in den Blockschaltbildern bzw. Schaubildern ein Modul, ein Segment oder einen Teil von Anweisungen darstellen, das bzw. der eine oder mehrere ausführbare Anweisungen zur Ausführung der festgelegten logischen Funktion(en) aufweist. In einigen alternativen Ausführungen können die in den Blöcken angegebenen Funktionen in einer anderen Reihenfolge als in den Figuren gezeigt stattfinden. Zwei nacheinander gezeigte Blöcke können zum Beispiel in Wirklichkeit weitgehend gleichzeitig ausgeführt werden, oder die Blöcke können manchmal je nach entsprechender Funktionalität in umgekehrter Reihenfolge ausgeführt werden. Es ist ferner anzumerken, dass jeder Block der Blockschaltbilder bzw. Schaubilder und/oder der Ablaufpläne sowie Kombinationen aus Blöcken in den Blockschaltbildern bzw. Schaubildern und/oder den Ablaufplänen durch spezielle auf Hardware beruhende Systeme umgesetzt werden können, welche die festgelegten Funktionen oder Schritte durchführen, oder Kombinationen aus Spezial-Hardware und Computeranweisungen ausführen.
  • Die Beschreibungen der verschiedenen Ausführungsformen der vorliegenden Erfindung erfolgten zum Zweck der Veranschaulichung, sollen jedoch nicht erschöpfend oder auf die offenbarten Ausführungsformen beschränkt sein. Viele Modifikationen und Varianten sind für den Fachmann erkennbar, ohne vom Umfang der beschriebenen Ausführungsformen abzuweichen. Die hierin verwendete Terminologie wurde gewählt, um die Grundgedanken der Ausführungsformen, die praktische Anwendung oder technische Verbesserung gegenüber auf dem Markt befindlichen Technologien am besten zu erklären bzw. um anderen Fachleuten das Verständnis der hierin beschriebenen Ausführungsformen zu ermöglichen.

Claims (26)

  1. Durch einen Computer ausgeführtes Verfahren, das umfasst: Ausführen, durch einen Prozessor, eines Softwareprogramms, das einen Funktionsaufruf einer gemeinsam genutzten Bibliothek erfordert; erneutes Laden der gemeinsam genutzten Bibliothek, ohne die Ausführung des Softwareprogramms zu stoppen, wobei die gemeinsam genutzte Bibliothek im Anschluss an die Ausführung des Softwareprogramms aktualisiert wurde; Aktualisieren einer globalen Offsettabelle (GOT) als Reaktion auf ein Auflösen einer zu dem Funktionsaufruf gehörenden Verbindungsadresse, eines Eintrags in der GOT, der ein Verbindungsadressfeld, ein Indexfeld und ein Aufgelöst-Feld aufweist, wobei das Aktualisieren ein Aktualisieren des Indexfeldes mit einem positiven Wert und ein Markieren des Aufgelöst-Feldes mit einem positiven Flag für den Eintrag in der GOT aufweist; als Reaktion auf ein erneutes Laden der gemeinsam genutzten Bibliothek, ohne die Ausführung des Softwareprogramms zu stoppen, ein Finden des Eintrags in der GOT, der über den positiven Wert in dem Indexfeld und das positive Flag in dem Aufgelöst-Feld verfügt; und Zurückgeben eines Adresswerts in dem Verbindungsadressfeld für den Eintrag, der über den positiven Wert in dem Indexfeld verfügt, als Reaktion auf eine nachfolgende Ausführung des Funktionsaufrufs der gemeinsam genutzten Bibliothek.
  2. Durch einen Computer ausgeführtes Verfahren nach Anspruch 1, das des Weiteren vor dem Aktualisieren der GOT ein Setzen des Verbindungsadressfeldes auf einen Standardwert umfasst.
  3. Durch einen Computer ausgeführtes Verfahren nach Anspruch 1, das des Weiteren vor dem Aktualisieren der GOT ein Markieren des Aufgelöst-Feldes mit einem nicht positiven Wert umfasst, wenn das Aufgelöst-Feld zuvor den positiven Wert enthalten hat.
  4. Durch einen Computer ausgeführtes Verfahren nach Anspruch 1, wobei das erneute Laden der gemeinsam genutzten Bibliothek, ohne die Ausführung des Softwareprogramms zu stoppen, ein Auflösen einer neuen Adresse für die gemeinsam genutzte Bibliothek aufweist, die aktualisiert wurde.
  5. Durch einen Computer ausgeführtes Verfahren nach Anspruch 4, wobei das Aktualisieren der GOT ein Ersetzen eines Standardwerts durch die neue Adresse in dem Verbindungsadressfeld aufweist.
  6. Durch einen Computer ausgeführtes Verfahren nach Anspruch 4, wobei der Adresswert in dem Verbindungsadressfeld die neue Adresse ist, welche für die gemeinsam genutzte Bibliothek aufgelöst wurde.
  7. Durch einen Computer ausgeführtes Verfahren nach Anspruch 1, wobei die gemeinsam genutzte Bibliothek vor dem erneuten Laden der gemeinsam genutzten Bibliothek erstmalig für den Funktionsaufruf der gemeinsam genutzten Bibliothek während des Ausführens des Softwareprogramms geladen wird.
  8. System, das aufweist: einen Arbeitsspeicher, der über durch einen Computer lesbare Anweisungen verfügt; und einen oder mehrere Prozessoren, um die durch einen Computer lesbaren Anweisungen auszuführen, wobei die durch einen Computer lesbaren Anweisungen den einen oder die mehreren Prozessoren steuern, um Operationen durchzuführen, die aufweisen: Ausführen eines Softwareprogramms, das einen Funktionsaufruf einer gemeinsam genutzten Bibliothek erfordert; erneutes Laden der gemeinsam genutzten Bibliothek, ohne die Ausführung des Softwareprogramms zu stoppen, wobei die gemeinsam genutzte Bibliothek im Anschluss an die Ausführung des Softwareprogramms aktualisiert wurde; Aktualisieren einer globalen Offsettabelle (GOT) als Reaktion auf ein Auflösen einer zu dem Funktionsaufruf gehörenden Verbindungsadresse, eines Eintrags in der GOT, der ein Verbindungsadressfeld, ein Indexfeld und ein Aufgelöst-Feld aufweist, wobei das Aktualisieren ein Aktualisieren des Indexfeldes mit einem positiven Wert und ein Markieren des Aufgelöst-Feldes mit einem positiven Flag für den Eintrag in der GOT aufweist; als Reaktion auf ein erneutes Laden der gemeinsam genutzten Bibliothek, ohne die Ausführung des Softwareprogramms zu stoppen, ein Finden des Eintrags in der GOT, der über den positiven Wert in dem Indexfeld und das positive Flag in dem Aufgelöst-Feld verfügt; und Zurückgeben eines Adresswerts in dem Verbindungsadressfeld für den Eintrag, der über den positiven Wert in dem Indexfeld verfügt, als Reaktion auf eine nachfolgende Ausführung des Funktionsaufrufs der gemeinsam genutzten Bibliothek.
  9. System nach Anspruch 8, das des Weiteren vor dem Aktualisieren der GOT ein Setzen des Verbindungsadressfeldes auf einen Standardwert aufweist.
  10. System nach Anspruch 8, das des Weiteren vor dem Aktualisieren der GOT ein Markieren des Aufgelöst-Feldes mit einem nicht positiven Wert aufweist, wenn das Aufgelöst-Feld zuvor den positiven Wert enthalten hat.
  11. System nach Anspruch 8, wobei das erneute Laden der gemeinsam genutzten Bibliothek, ohne die Ausführung des Softwareprogramms zu stoppen, ein Auflösen einer neuen Adresse für die gemeinsam genutzte Bibliothek aufweist, die aktualisiert wurde.
  12. System nach Anspruch 11, wobei das Aktualisieren der GOT ein Ersetzen eines Standardwerts durch die neue Adresse in dem Verbindungsadressfeld aufweist.
  13. System nach Anspruch 11, wobei der Adresswert in dem Verbindungsadressfeld die neue Adresse ist, welche für die gemeinsam genutzte Bibliothek aufgelöst wurde.
  14. System nach Anspruch 8, wobei die gemeinsam genutzte Bibliothek vor dem erneuten Laden der gemeinsam genutzten Bibliothek erstmalig für den Funktionsaufruf der gemeinsam genutzten Bibliothek während des Ausführens des Softwareprogramms geladen wird.
  15. Computerprogrammprodukt, das ein durch einen Computer lesbares Speichermedium mit damit verkörperten Programmanweisungen aufweist, wobei die Programmanweisungen durch einen Prozessor ausführbar sind, um den Prozessor zum Durchführen von Operationen zu veranlassen, die aufweisen: Ausführen eines Softwareprogramms, das einen Funktionsaufruf einer gemeinsam genutzten Bibliothek erfordert; erneutes Laden der gemeinsam genutzten Bibliothek, ohne die Ausführung des Softwareprogramms zu stoppen, wobei die gemeinsam genutzte Bibliothek im Anschluss an die Ausführung des Softwareprogramms aktualisiert wurde; Aktualisieren einer globalen Offsettabelle (GOT) als Reaktion auf ein Auflösen einer zu dem Funktionsaufruf gehörenden Verbindungsadresse, eines Eintrags in der GOT, der ein Verbindungsadressfeld, ein Indexfeld und ein Aufgelöst-Feld aufweist, wobei das Aktualisieren ein Aktualisieren des Indexfeldes mit einem positiven Wert und ein Markieren des Aufgelöst-Feldes mit einem positiven Flag für den Eintrag in der GOT aufweist; als Reaktion auf ein erneutes Laden der gemeinsam genutzten Bibliothek, ohne die Ausführung des Softwareprogramms zu stoppen, ein Finden des Eintrags in der GOT, der über den positiven Wert in dem Indexfeld und das positive Flag in dem Aufgelöst-Feld verfügt; und Zurückgeben eines Adresswerts in dem Verbindungsadressfeld für den Eintrag, der über den positiven Wert in dem Indexfeld verfügt, als Reaktion auf eine nachfolgende Ausführung des Funktionsaufrufs der gemeinsam genutzten Bibliothek.
  16. Computerprogrammprodukt nach Anspruch 15, das des Weiteren vor dem Aktualisieren der GOT ein Setzen des Verbindungsadressfeldes auf einen Standardwert aufweist.
  17. Computerprogrammprodukt nach Anspruch 15, das des Weiteren vor dem Aktualisieren der GOT ein Markieren des Aufgelöst-Feldes mit einem nicht positiven Wert aufweist, wenn das Aufgelöst-Feld zuvor den positiven Wert enthalten hat.
  18. Computerprogrammprodukt nach Anspruch 15, wobei das erneute Laden der gemeinsam genutzten Bibliothek, ohne die Ausführung des Softwareprogramms zu stoppen, ein Auflösen einer neuen Adresse für die gemeinsam genutzte Bibliothek aufweist, die aktualisiert wurde.
  19. Computerprogrammprodukt nach Anspruch 18, wobei das Aktualisieren der GOT ein Ersetzen eines Standardwerts durch die neue Adresse in dem Verbindungsadressfeld aufweist.
  20. Computerprogrammprodukt nach Anspruch 18, wobei der Adresswert in dem Verbindungsadressfeld die neue Adresse ist, welche für die gemeinsam genutzte Bibliothek aufgelöst wurde.
  21. Durch einen Computer ausgeführtes Verfahren, das umfasst: erneutes Laden einer gemeinsam genutzten Bibliothek, ohne die Ausführung eines Softwareprogramms zu stoppen, das die gemeinsam genutzte Bibliothek aufruft; Aktualisieren eines Indexfeldes mit einem positiven Wert und Markieren eines Aufgelöst-Feldes mit einem positiven Flag für einen Eintrag in einer globalen Offsettabelle (GOT) als Reaktion auf ein Auflösen einer Verbindungsadresse zu der gemeinsam genutzten Bibliothek; und als Reaktion auf ein erneutes Laden der gemeinsam genutzten Bibliothek, ohne die Ausführung des Softwareprogramms zu stoppen, ein Finden des Eintrags in der GOT, der über die für die gemeinsam genutzte Bibliothek aufgelöste Verbindungsadresse verfügt.
  22. Durch einen Computer ausgeführtes Verfahren nach Anspruch 21, wobei das Finden des Eintrags in der GOT, der über die für die gemeinsam genutzte Bibliothek aufgelöste Verbindungsadresse verfügt, als Reaktion auf eine nachfolgende Ausführung eines Aufrufs der gemeinsam genutzten Bibliothek erfolgt.
  23. Durch einen Computer ausgeführtes Verfahren nach Anspruch 21, das des Weiteren vor dem Aktualisieren des Indexfeldes mit dem positiven Wert und dem Markieren des Aufgelöst-Feldes mit dem positiven Flag für den Eintrag in der GOT ein Setzen des Verbindungsadressfeldes auf einen Standardwert umfasst.
  24. Durch einen Computer ausgeführtes Verfahren nach Anspruch 1, das des Weiteren vor dem Aktualisieren des Indexfeldes mit dem positiven Wert und dem Markieren des Aufgelöst-Feldes mit dem positiven Flag für den Eintrag in der GOT ein Markieren des Aufgelöst-Feldes mit einem nicht positiven Wert umfasst, wenn das Aufgelöst-Feld zuvor den positiven Wert enthalten hat.
  25. System, das aufweist: einen Arbeitsspeicher, der über durch einen Computer lesbare Anweisungen verfügt; und einen oder mehrere Prozessoren, um die durch einen Computer lesbaren Anweisungen auszuführen, wobei die durch einen Computer lesbaren Anweisungen den einen oder die mehreren Prozessoren steuern, um Operationen durchzuführen, die aufweisen: erneutes Laden einer gemeinsam genutzten Bibliothek, ohne die Ausführung eines Softwareprogramms zu stoppen, das die gemeinsam genutzte Bibliothek aufruft; Aktualisieren eines Indexfeldes mit einem positiven Wert und Markieren eines Aufgelöst-Feldes mit einem positiven Flag für einen Eintrag in einer globalen Offsettabelle (GOT) als Reaktion auf ein Auflösen einer Verbindungsadresse zu der gemeinsam genutzten Bibliothek; und als Reaktion auf ein erneutes Laden der gemeinsam genutzten Bibliothek, ohne die Ausführung des Softwareprogramms zu stoppen, ein Finden des Eintrags in der GOT, der über die für die gemeinsam genutzte Bibliothek aufgelöste Verbindungsadresse verfügt.
  26. System nach Anspruch 25, wobei das Finden des Eintrags in der GOT, der über die für die gemeinsam genutzte Bibliothek aufgelöste Verbindungsadresse verfügt, als Reaktion auf eine nachfolgende Ausführung eines Aufrufs der gemeinsam genutzten Bibliothek erfolgt.
DE112021004940.2T 2020-11-05 2021-11-02 Erneutes Laden einer aktualisierten, gemeinsam genutzten Bibliothek, ohne die Ausführung einer Anwendung zu stoppen Pending DE112021004940T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/089,847 2020-11-05
US17/089,847 US11347523B2 (en) 2020-11-05 2020-11-05 Updated shared library reloading without stopping the execution of an application
PCT/IB2021/060126 WO2022097020A1 (en) 2020-11-05 2021-11-02 Updated shared library reloading without stopping execution of an application

Publications (1)

Publication Number Publication Date
DE112021004940T5 true DE112021004940T5 (de) 2023-08-03

Family

ID=81380233

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112021004940.2T Pending DE112021004940T5 (de) 2020-11-05 2021-11-02 Erneutes Laden einer aktualisierten, gemeinsam genutzten Bibliothek, ohne die Ausführung einer Anwendung zu stoppen

Country Status (6)

Country Link
US (1) US11347523B2 (de)
JP (1) JP2023547070A (de)
CN (1) CN116685946A (de)
DE (1) DE112021004940T5 (de)
GB (1) GB2614864A (de)
WO (1) WO2022097020A1 (de)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11755313B2 (en) * 2021-07-12 2023-09-12 Microsoft Technology Licensing, Llc Implementing changes made to source code of reloadable types at runtime

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5615400A (en) 1993-06-30 1997-03-25 Apple Computer, Inc. System for object oriented dynamic linking based upon a catalog of registered function set or class identifiers
US5835743A (en) * 1994-06-30 1998-11-10 Sun Microsystems, Inc. Application binary interface and method of interfacing binary application program to digital computer
JPH11110194A (ja) 1997-10-06 1999-04-23 Toshiba Corp 外部ライブラリ関数との結合方法ならびに同方法がプログラムされ記録される記録媒体
US6442752B1 (en) 1999-08-26 2002-08-27 Unisys Corporation Method, apparatus, and computer program product for replacing a dynamic link library (dll) of a first computing environment with a dll of a second computing environment that can be invoked from the first computing environment in a transparent manner
KR100518584B1 (ko) 2003-07-12 2005-10-04 삼성전자주식회사 공유 라이브러리 시스템 및 상기 시스템 구축 방법
US8997074B1 (en) 2006-09-29 2015-03-31 Trend Micro Incorporated Dynamic linking library (DLL) replacement in an embedded operating system environment
KR101256149B1 (ko) 2010-07-12 2013-04-19 홍익대학교 산학협력단 프로그램 카운터 인코딩을 이용한 간접 함수 호출 보호 방법 및 보호 장치
CN103329063B (zh) * 2010-10-04 2017-09-12 阿沃森特亨茨维尔有限责任公司 用于实时地监视和管理数据中心资源的系统和方法
EP2477110A1 (de) 2011-01-14 2012-07-18 Wibu-Systems AG Verfahren zum Schutz eines Anwendungsprogramms vor Reverse-Engineering und zugehöriges Computerprogrammprodukt
US20160274878A1 (en) 2015-03-19 2016-09-22 Google Inc. Methods and systems for removing plt stubs from dynamically linked binaries
CN105279429B (zh) 2015-11-24 2018-01-19 无锡江南计算技术研究所 一种got表写保护的保护方法
US10095493B2 (en) 2016-12-14 2018-10-09 International Business Machines Corporation Call sequence generation based on type of routine
US10175966B2 (en) 2017-01-09 2019-01-08 International Business Machines Corporation Linker rewriting to eliminate TOC pointer references
US10445112B2 (en) * 2017-01-27 2019-10-15 Software Ag Inline dispatching function interface (IDFI), and associated system and/or method
US10698792B2 (en) 2018-05-02 2020-06-30 Microsoft Technology Licensing, Llc Execution control with cross-level trace mapping

Also Published As

Publication number Publication date
JP2023547070A (ja) 2023-11-09
US20220137987A1 (en) 2022-05-05
CN116685946A (zh) 2023-09-01
US11347523B2 (en) 2022-05-31
GB2614864A (en) 2023-07-19
GB202306062D0 (en) 2023-06-07
WO2022097020A1 (en) 2022-05-12

Similar Documents

Publication Publication Date Title
DE112018002984T5 (de) Konformitätsbewusste Laufzeiterzeugung auf Grundlage von Anwendungsmustern und Risikobeurteilung
DE112012000693B4 (de) Ausführen einer Vielzahl von Instanzen einer Anwendung
DE112018005898T5 (de) Dynamische bereitstellung von software-funktionen
US10417118B2 (en) Development-time awareness of a production dependency injection environment
DE112012003716T5 (de) Erzeugen von kompiliertem Code, der Registeraktivität angibt
DE112010004160T5 (de) Portieren virtueller Abbilder zwischen Plattformen
DE60102694T2 (de) Modulares computersystem und -verfahren
US11327750B1 (en) Domain-driven application breakout
DE112017005015T5 (de) Verarbeiten von gleichgeordneten Aufrufen (SIBLING CALLS)
DE102021130906A1 (de) Optimieren von zugriffen auf begrenzungsinformationen beim pufferschutz
CN115934244A (zh) 生成用于测试容器编排系统的测试集群
DE112018003578T5 (de) Gleichzeitige vorhersage von verzweigungsadressen und aktualisierung des registerinhalts
CN114341847A (zh) 对容器的外部操作与突变事件的对应关系
DE112021004940T5 (de) Erneutes Laden einer aktualisierten, gemeinsam genutzten Bibliothek, ohne die Ausführung einer Anwendung zu stoppen
US11656864B2 (en) Automatic application of software updates to container images based on dependencies
DE112021005927T5 (de) Patchen von arbeitsabläufen
DE112018004636T5 (de) Gleichzeitige änderung einer gemeinsam genutzten cachezeile durch mehrere prozessoren
DE112021003803T5 (de) Pool-verwaltung für den anwendungsstart in einer bordeinheit
DE112018003233T5 (de) Vorhersage von codespezifischen zugehörigen registern
Monteiro et al. Cloud Interchangeability-Redefining Expectations.
DE112021004798T5 (de) Gewährleisten einer sicheren bereitstellung einer blockchain-infrastruktur
DE112020003634T5 (de) Automatische verifizierung der optimierung von konstrukten auf hoher ebene unter verwendung von prüfvektoren
DE102021130965A1 (de) Aufrüsten einer sequenz von mikrodiensten in einer cloud-computing-umgebung
DE112021001425T5 (de) Sichere datenreplikation in verteilten datenspeicherumgebungen
DE112021002246T5 (de) Symphonisierung der serverlosen funktionen von hybriden diensten

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R084 Declaration of willingness to licence