DE69232761T2 - Verfahren und vorrichtung zur aenderung von dynamische zuweisbaren objektcodedateien - Google Patents
Verfahren und vorrichtung zur aenderung von dynamische zuweisbaren objektcodedateienInfo
- Publication number
- DE69232761T2 DE69232761T2 DE69232761T DE69232761T DE69232761T2 DE 69232761 T2 DE69232761 T2 DE 69232761T2 DE 69232761 T DE69232761 T DE 69232761T DE 69232761 T DE69232761 T DE 69232761T DE 69232761 T2 DE69232761 T2 DE 69232761T2
- Authority
- DE
- Germany
- Prior art keywords
- memory
- location
- instructions
- status information
- object code
- 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.)
- Expired - Lifetime
Links
- 238000000034 method Methods 0.000 title claims description 41
- 238000012544 monitoring process Methods 0.000 claims description 36
- 238000004590 computer program Methods 0.000 claims description 17
- 230000011664 signaling Effects 0.000 claims description 13
- 238000012546 transfer Methods 0.000 claims description 5
- 230000006870 function Effects 0.000 description 34
- 230000008569 process Effects 0.000 description 13
- 238000003491 array Methods 0.000 description 9
- 238000003780 insertion Methods 0.000 description 7
- 230000037431 insertion Effects 0.000 description 7
- 238000013459 approach Methods 0.000 description 6
- 230000008859 change Effects 0.000 description 6
- 238000012545 processing Methods 0.000 description 6
- 238000011161 development Methods 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 3
- 230000015572 biosynthetic process Effects 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 238000005206 flow analysis Methods 0.000 description 2
- BBRBUTFBTUFFBU-LHACABTQSA-N Ornoprostil Chemical compound CCCC[C@H](C)C[C@H](O)\C=C\[C@H]1[C@H](O)CC(=O)[C@@H]1CC(=O)CCCCC(=O)OC BBRBUTFBTUFFBU-LHACABTQSA-N 0.000 description 1
- 238000007630 basic procedure Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3644—Software debugging by instrumenting at runtime
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/54—Link editing before load time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Devices For Executing Special Programs (AREA)
Description
- Die vorliegende Erfindung betrifft allgemein ein Verfahren und eine Vorrichtung zum Modifizieren von Relativobjektdateien. Die vorliegende Erfindung betrifft insbesondere ein Verfahren zum Einfügen zusätzlicher Anweisungen und Daten in eine existierende Relativobjektdatei eines Computerprogramms für einen beliebigen Zweck. Dieser Zweck ist insbesondere die Überwachung von Speicherzugriff durch das Computerprogramm.
- Trotz der Zunahme der Geschwindigkeiten von Zentraleinheiten und der Softwarekomplexität in der letzten Zeit verlassen sich die meisten Programmierer weiterhin auf Entwicklungstools, die vor mehr als fünfzig Jahren entwickelt wurden und die sich seitdem nicht bedeutend geändert haben. Diese Entwicklungstools haben ernsthafte Unzulänglichkeiten, die die Schwierigkeiten des Entwickelns großer, komplexer Programme noch verschärfen.
- Probleme mit der Entwicklung von Applikationen in C/C++ sind häufig ernsthafter als mit anderen Programmiersprachen, sind aber recht typisch. Zeiger- und Speichermanagement- Einrichtungen von C/C++ machen es schwer, große und robuste Programme zu erstellen. Vorsichtige C/C++ Programmierer wenden derzeit viele kommerzielle Objektcode-Bibliotheken nur zögerlich an, weil sie besorgt sind, dass sie später möglicherweise Wochen an Zeit bei der Suche nach Wild-Pointer- Bugs verlieren, die durch die Verwendung einer bestimmten Bibliothek verursacht wurden. Die Schwierigkeit beim Ermitteln dieser Arten von Programmierbugs und vielen anderen ist unmittelbar mit der Art und Weise, in der ablauffähiger Code von Source-Code erzeugt wird, sowie mit den Unzulänglichkeiten derzeitiger Entwicklungstools verbunden.
- Der Vorgang des Transformierens von Source-Code in "ablauffähigen" Code ist, kurz ausgedrückt, wie folgt. Der Source-Code für ein typisches Computerprogramm wird in viele Dateien unterteilt. Einige dieser Dateien können High-Level- Sprachcode wie C, C++, Pascal, Fortran, Ada oder PL1, andere können Assemblersprachcode enthalten. Jede High-Level- Sprachdatei wird von einem sprachspezifischen Compiler entweder in eine Relativobjektdatei oder in eine Assemblersprachdatei umgesetzt. Ein Assembler setzt die Assemblersprachdateien in Relativobjektdateien um. Ein Programmbinder (Linker) führt alle Relativobjektdateien zu einem einzelnen ablauffähigen Programm zusammen.
- Wenn Programme größer und komplexer werden, wird es immer schwieriger, sie zu testen und ihre Fehler zu finden. Wenn Aspekte des Verhaltens eines Programms überwacht oder analysiert werden sollen, besteht die derzeitige Praxis darin, den Compiler zu veranlassen, die zusätzlichen Anweisungen auszugeben, die zum Ausführen der gewünschten Überwachung benötigt werden. Ein Beispiel hierfür existiert in vielen Pascal-Compilern; eine Art und Weise besteht typischerweise darin, den Compiler anzuweisen, die zusätzlichen Anweisungen auszugeben, die zum Prüfen von Array-Grenzen zur Laufzeit benötigt werden, und einen Fehler zu signalisieren, wenn eine Verletzung vorliegt. Ein weiteres Beispiel existiert in vielen Unix/C-Compilern; die meisten Compiler geben auf Anforderung zusätzliche Anweisungen aus, um aufzuzeichnen, wie oft jede Funktion aufgerufen wurde.
- Ein weiteres Beispiel für diese derzeitige Praxis ist in dem Artikel von Fun Ting Chan et al. "AIDA - A Dynamic Data Flow Anomaly Detection System for Pascal Programs" beschrieben (Herausgeber Software Practice & Experience, Bd. 17, Nr. 3, März 1987, Chichester, GB, Seiten 227 bis 239). Dieser Artikel beschreibt ein automatisiertes Instrumentationssystem zum Durchführen von Datenablaufanalysen für Pascal-Programme. Die Software führt eine Programminstrumentierung durch Einfügen von Software-Probes in ein Ursprungsprogramm durch. Das instrumentierte Ursprungsprogramm wird dann kompiliert und die Datenablaufanalyse während der Ausführung des Programms durchgeführt.
- Der Ansatz, den Compiler zu veranlassen, die zusätzlichen Anweisungen auszugeben, die zum Ausführen eines Überwachungs- oder Analyseschemas benötigt werden, hat jedoch wenigstens drei erhebliche Mängel: Erstens ist das Modifizieren des Compilers zum Ausgeben neuer Sequenzen schwierig und in der Praxis nahezu unmöglich, weil die meisten Programmierer den Source-Code zum Compiler nicht haben. Zweitens kann das Neukompilieren aller Programmdateien, nur um die zusätzlichen eingefügten Anweisungen zu erhalten, sehr zeitaufwändig und verschwenderisch sein; und schließlich geht nicht sämtlicher Code durch einen Compiler; ein Teil des Codes wird in Assemblersprache geschrieben und erhält die darin eingefügten neuen Anweisungen nicht. Somit kann nicht einfach jegliche Überwachung, die vollständig sein muss, damit sie ihren Zweck richtig erfüllt, nur durch den Compiler implementiert werden.
- Einige der schlimmsten Entwicklungsprobleme betreffen die Schwierigkeit beim Suchen und Eliminieren einer großen Klasse von Fehlern in Bezug auf Speicherzugriffe. Zu den wichtigsten speicherzugriffsbezogenen Fehlern, die ein Programmierer erkennen muss, gehören Array-Grenzverletzungen, uninitialisierte Speicherlesevorgänge, Zugriffe auf freien Speicher und sich seltsamerweise verändernde Daten.
- Array-Grenzverletzungen (wobei eine Array eine Ansammlung von im Speicher nebeneinander liegenden Daten ist) treten bei Gelegenheiten auf, wenn ein Programm hinter dem Ende oder vor dem Anfang einer Array liest oder schreibt und auf jedes Datenelement zugreift, das sich zufällig an dieser Speicherstelle befindet.
- Zu uninitialisierten Speicherlesevorgängen kommt es dann, wenn ein Programm Speicherkapazität für die Datenspeicherung zuweist, aber diese Kapazität nicht vollständig initialisiert. Später wird dann ein uninitialisierter Teil gelesen und ungewollt ein Zufallswert gegeben, der zuweilen zu einem Ausfall des Programms führen kann, manchmal aber auch nicht.
- Zugriffe auf freien Speicher bedeuten eine Situation, bei der ein Programm die Zuordnung von Speicherkapazität aufhebt, sie aber fälschlicherweise weiter benutzt. Wenn das Programm diesen Speicherplatz dann für einen anderen Zweck erneut zuweist, wird derselbe Speicherplatz für zwei verschiedene Zwecke verwendet, und das Programm wird möglicherweise falsch arbeiten.
- Der Ausdruck "sich seltsamerweise verändernde Daten" ist ein Versuch, alle anderen Fälle zusammenzufassen. Es gibt häufig viele verschiedene Möglichkeiten, ein Datenelement zu ändern, insbesondere ein "globales" Datenelement. Es kann für den Programmierer sehr schwer sein zu entdecken, welche Funktion bei einem Ablauf des Programms das Datenelement fälschlicherweise verändert. Was der Programmierer braucht, ist ein Überwachungsprogramm, das ihm jede Veränderung eines bestimmten Datenelementes anzeigt (dies wird als "Watchpoint" bezeichnet).
- Der Programmentwickler braucht eindeutig eine umfassende Art und Weise, den Ablauf heutiger und zukünftiger Programme, insbesondere deren Speicherzugriff, zu überwachen.
- Die Erfindung stellt ein Verfahren zum Signalisieren von Fehlern im Speicherzugriff sowie ein zugehöriges Computersystem, ein Computerprogramm und ein Computerspeichermedium gemäß Definition in den beiliegenden unabhängigen Ansprüchen bereit, auf die nunmehr Bezug zu nehmen ist. Bevorzugte oder vorteilhafte Merkmale der Erfindung sind in den abhängigen Unteransprüchen dargelegt.
- Somit stellt die Erfindung in einem ersten Aspekt vorteilhafterweise ein Verfahren bereit, bei dem eine Objektcodedatei durch Einfügen zusätzlicher Anweisungen und/oder Daten zwischen vorexistierenden Anweisungen und Daten expandiert wird, die ebenfalls auf irgendeine Weise modifiziert werden können. Es kann eine grundsätzlich unbegrenzte Vielzahl zusätzlicher Anweisungen und Daten für eine ebenso breite Palette verschiedener Zwecke eingefügt werden. Nach dem Einfügungsschritt werden die Offsets in der Datei geprüft und ggf. modifiziert, so dass sie die neuen Positionen der vorexistierenden Anweisungen und Daten reflektieren, so dass der expandierte Code ordnungsgemäß abläuft. In der bevorzugten Ausgestaltung werden zusätzliche Offsets in Symboltabellen, Datenverschiebungstabellen und Anweisungsverschiebungstabellen auf dieselbe allgemeine Weise aktualisiert wie die anderen Offsets. Das Grundverfahren in der Ausgestaltung lautet wie folgt:
- Im Speicherraum wird eine alte Objektcodetabelle angelegt, die die vorexistierenden Anweisungen und Daten enthält. Es wird auch Raum für andere Tabellen zugewiesen: eine neue Objektcodetabelle, eine Zwischenelement-Offsettabelle, eine Vorwärtsindextabelle und eine Vorwärtssteuerindextabelle. Für jedes Element in der alten Objektcodetabelle (ob Anweisung oder Datenelement) werden die folgenden vier Schritte durchgeführt: (1) Erstellen eines neuen Codeblocks, der gewünschte zusätzliche Anweisungen und/oder Daten und das Element umfasst, und Speichern desselben in der neuen Objektcodetabelle; (2) Speichern der Stelle des Elementes innerhalb der neuen Objektcodetabelle in der Vorwärtsindextabelle; (3) Speichern der Stelle des neuen Codeblocks innerhalb der neuen Objektcodetabelle in der Vorwärtssteuerindextabelle; und (4) für Elemente, die Zwischenelement-Offsets enthalten, Speichern der Stelle innerhalb der alten Objektcodetabelle des Offsets und der Basis, von der aus er gemessen wird, in der Zwischenelement-Offsettabelle. Danach wird für jedes Paar von Offset/Basisstellen in der Zwischenelement-Offsettabelle der in der neuen Objektcodetabelle gespeicherte Offset anhand der Indextabellen aktualisiert. Schließlich werden die Offsets in beliebigen Symboltabellen, Anweisungsverschiebungsstrukturen oder Datenverschiebungsstrukturen in der alten Objektcodedatei so aktualisiert, dass der neue Offset auf die Speicherstelle in der neuen Objektcodetabelle auf die Stelle verweist, zu der das verwiesene Element bewegt wurde.
- In einem zweiten Aspekt kann die Erfindung vorteilhafterweise ein Verfahren bereitstellen, bei dem alle oder im Wesentlichen alle Speicherzugriffe eines bestimmten Programms zwecks Durchführung einer Fehlerprüfung überwacht werden (nicht einschließlich der Speicherzugriffe für Anweisungsabrufe). In einer Ausgestaltung werden alle Objektcodedateien für ein ablauffähiges Programm verarbeitet und die Anweisungen hinzugefügt, um das folgende Überwachungsschema zu implementieren. Eine Speicherstatusarray wird mit einem Eingang für die meisten Speicherstellen erstellt, auf die das Programm gültigerweise zugreift. Jeder Eintrag gibt den Zustand der entsprechenden Speicherstelle an, und es können drei Zustände vorliegen: unzugewiesen und uninitialisiert, zugewiesen aber uninitialisiert, sowie zugewiesen und initialisiert. Vor jeder vorexistierenden Anweisung, die auf Speicherstellen zugreift oder die den Speicherstatus ändern kann, werden zusätzliche Anweisungen hinzugefügt, um die Speicherstatusarray aufrecht zu erhalten und die Speicherstatusarray zum Überprüfen auf Fehler in Bezug auf das Schreiben von unzugewiesenem Speicher und auf Lesen von unzugewiesenem oder uninitialisiertem Speicher zu verwenden. In einer besonderen Ausgestaltung werden die Datensektionen der Objektcodedateien mit zusätzlichen Dummy-Einträgen zwischen jedem Datenelement expandiert. Diesen zusätzlichen Einträgen wird der Status unzugewiesen und uninitialisiert zugeordnet, und sie unterstützen bei der Erkennung von Array- Grenzverletzungen und ähnlichen Datenfehlern. In einer weiteren besonderen Ausgestaltung wird eine Liste von Speicher- oder Datenelementstellen gespeichert, die Überwachungsstellen (Watchpoints) sind, mit denen eine umfassendere Überwachung durchgeführt werden soll.
- Ein weitergehendes Verständnis des Wesens und der Vorteile der Erfindung kann unter Bezugnahme auf die übrigen Teile der Beschreibung sowie auf die Zeichnungen gewonnen werden.
- Fig. 1 ist ein Blockdiagramm einer Relativobjektdatei, die durch eine Ausgestaltung der Erfindung zu einer neuen Relativobjektdatei expandiert wird;
- Fig. 2 ist ein Blockdiagramm, das die Beziehung zwischen einer Relativobjektdatei und einer alten Objektcodetabelle zeigt;
- Fig. 3 illustriert das allgemeine Daten/Anweisungs- Einfügungsverfahren;
- Fig. 4 ist ein Ablaufdiagramm des allgemeinen Daten/Anweisungs-Einfügungsverfahrens;
- Fig. 5 illustriert den allgemeinen Ablauf zum Implementieren eines Überwachungsschemas durch Modifizieren der Objektdateien für ein ablauffähiges Programm;
- Fig. 6 illustriert die verschiedenen Speicherzugriffszustände, die in einer bestimmten Ausgestaltung der Erfindung verwendet werden, die Speicherzugriffe eines Programms verfolgen soll;
- Fig. 7 ist eine virtuelle Speicherabbildung, die die Abschnitte von virtuellem Speicherplatz zeigt, der einem Pragramm zur Verfügung steht;
- Fig. 8 illustriert, wie Aufrufe an Betriebssystemroutinen gemäß einer Ausgestaltung der Erfindung gehandhabt werden, die Speicherzugriffe überwachen soll;
- Fig. 9 illustriert, wie die Objektdateien für ein ablauffähiges Programm durch eine Ausgestaltung der Erfindung verarbeitet werden, die Speicherzugriffe überwachen soll; und
- Fig. 10 illustriert die Bildung neuer Codeblöcke zum Implementieren der Speicherzugriffsüberwachung der bevorzugten Ausgestaltung.
- Ein Aspekt der vorliegenden Erfindung ist ein Verfahren zum Expandieren einer Relativobjektdatei, typischerweise durch Einfügen neuer Anweisungen und Daten zwischen vorexistierenden Anweisungen und Daten der Datei, ohne dass eine Neukompilation notwendig wäre. Fig. 1 illustriert eine vorexistierende Objektcodedatei 1 ("oldfile.o"), die durch ein Expansionsmittel 5 zur Bildung einer neuen Objektcodedatei 1 ("newfile.o") erweitert wird. In der bevorzugten Ausgestaltung ist das Expansionsmittel 5 ein Universalcomputer mit einem Speicher, der von einem Computerprogramm gesteuert arbeitet. Da das Expansionsmittel 5 Objektdateien als Eingang erhält, können Überwachungsschemata umfassend sein; das Verfahren kann auf sämtlichen Code angewendet werden, der in das endgültige ablauffähige Produkt eingeht, und nicht nur auf diejenigen Abschnitte, für die Source-Code zur Verfügung steht.
- Die nachfolgend beschriebene besondere Ausgestaltung des Expansionsmittels 5 ist für ein auf Sun OS 4.1.1 laufendes Sun3/60 unter Verwendung der C/C++ Compiler von Sun Microsystems, Inc. aus Mountain View in Kalifornien ausgelegt, so dass die Beschreibung in einigen Hinsichten für dieses System spezifisch ist. In diesem System hat ein Standardformat für eine Relativobjektdatei 1 (.o Datei) 7 Teile, wie in Fig. 2 gezeigt ist:
- - Ein 32-Byte-Header II, der die Längen der übrigen Teile beschreibt;
- - Binäre Maschinenanweisungen 12a;
- - Binäre Daten 12b;
- - Symbole 13, die einen Namen (einen Index auf die Stringsektion), einen Typ, einen Wert und andere weniger wichtige Felder haben;
- - Anweisungsverschiebungsdatenstrukturen 14, die vorgeben, welche Bytes in der Anweisungssektion ungelöste Referenzen auf andere Daten oder Funktionen sind;
- - Datenverschiebungsdatenstrukturen 15, die vorgeben, welche Bytes in der Datensektion ungelöste Referenzen auf andere Daten oder Funktionen sind;
- - Strings 16, die Namen der Symbole.
- Die vorexistierenden Anweisungen enthalten allgemein viele Referenzen auf andere Anweisungen im Sinne von Offsets, d. h. im Sinne der Anzahl von Bytes, die die Anweisungen in der Objektcodedatei trennen. Wenn neue Anweisungen in den Code eingefügt werden, werden diese Offsets durch das Expansionsmittel 5 korrigiert. Eine einfache Modifizierung von Anweisungen, im Gegensatz zum Hinzufügen von neuen, kann die Anweisung verlängern oder verkürzen und auch eine Korrektur von Offsets erfordern. Ferner enthalten die Anweisungen, Symbole und Verschiebungsstrukturen auch Referenzen zu Daten und Anweisungen, und diese Referenzen haben häufig die Form eines Offsets vom Anfang der Objektdateisektion, die die Daten und Anweisungen enthält. Diese werden auf ähnliche Weise aktualisiert.
- Das Wertefeld bestimmter Symbole ist ein Offset zu den vorexistierenden Anweisungen und Daten und muss daher durch den Offeet der Speicherstelle ersetzt werden, zu der das vorexistierende Element weitergeleitet wurde. Die Symbole, die aktualisiert werden müssen, sind diejenigen, deren Typ-Feld eines der folgenden ist: N_TEXT, N_BSS, N_DATA, N_STSSYM, N_LCSYM, N_SO, N_SOL, N_ENTRY, N_LBRAC, N_RBRAC und N_ECOMM. Diese Symboltypen sind in der von Sun gelieferten include-Datei /usr/include/stab.h definiert (in der "Text" sich allgemein auf Anweisungen bezieht). Verschiebungsstrukturen haben ein Feld mit der Bezeichnung "r_address", das (wie das Wertefeld von Symbolen) ein Offset zu den vorexistierenden Anweisungen und Daten ist und mit der neuen Stelle aktualisiert werden muss, zu der die Bytes, auf die ursprünglich gezeigt wurde, bewegt wurden. Darüber hinaus sind für örtliche Verschiebungen die Bytes, auf die das Feld "r_address" zeigt, an sich ein Offset, der aktualisiert werden muss.
- Die eingefügten zusätzlichen Anweisungen sind häufig mit bestimmten vorexistierenden Anweisungen assoziiert und müssen jedes Mal dann ausgeführt werden, wenn diese vorexistierende Anweisung ausgeführt wird, in einigen Fällen unmittelbar vor der Ausführung dieser vorexistierenden Anweisung. Einige der Referenzen auf Anweisungen in der vorexistierenden Objektcodedatei 1 werden Offsets sein, die zum Übertragen der Programmsteuerung auf diese Punkte während der Ausführung verwendet werden. In diesem Fall werden die Anweisungsoffsets so eingestellt, dass sie auf den Anfang des zusätzlichen Codes in Verbindung mit dieser vorexistierenden Anweisung zeigen. In anderen Fällen, z. B. dann, wenn eine Referenz auf Daten zeigt, selbst dann, wenn zusätzliche Daten um ein bestimmtes Datenelement herum eingefügt werden, muss die Referenz möglicherweise trotzdem direkt auf dieses Datenelement zeigen. Die Daten und Anweisungen werden allgemein als eine Sektion behandelt. Referenzen auf Daten und Anweisungen werden vom Anfang der Sektion indexiert, die die Anweisungen und Daten enthält. Daten können auch mit Anweisungen vermischt sein. Das Expansionsmittel 5 ermittelt, ob ein bestimmter Wert in der Objektdatei ein Datenelement oder eine Anweisung ist, und ermittelt auch den Zweck jedes Referenzoffsets. Ferner setzen Compiler häufig unbenannte Daten, wie z. B. Konstanten, auf die im Source-Code verwiesen wird, in die Anweisungssektion, aber nicht innerhalb einer Funktion. Um diese Daten von tatsächlichen Anweisungen zu unterscheiden, wird eine vereinfachte Totcode-Analyse verwendet, die bei den benannten Eintragspunkten beginnt, die von den Symbolen des Typs N_TEXT vorgegeben werden, und den Eintragspunkten, die von den Anweisungsverschiebungsstrukturen abgeleitet werden. Anweisungen, die nicht erreicht werden können, werden als Daten angesehen. Eine Ausnahme ist die, dass einige Objektcode- Bibliotheken von wenigstens einem früheren Sun-Betriebssystem, 4.03, mehrere benannte Eintrittspunkte des Typs N_TEXT haben, die Daten und keine Eintrittspunkte sind und die daher für diese Zwecke ignoriert werden. Die Bezeichnungen dieser Daten sind "_BYADDR", "_NETGROUP", "_ypsleeptime" und "_ypserv_timeout". Eine weitere Ausnahme ist die, dass wenigstens ein Compiler, gcc (von der Free Software Foundation) benannte Konstantendaten in die Anweisungssektion setzt. Wenn die Objektdatei von gcc kompiliert wurde, wird das erste Wort jedes benannten Eintrittspunktes geprüft. Wenn es sich um eine Bindeanweisung (Link) handelt, wird der Eintrittspunkt als Funktion, ansonsten als Daten angesehen.
- Nachfolgend wird der Anweisungseinfügungsprozess des Expansionsmittels 5 mit Bezug auf Fig. 2-4 ausführlich beschrieben. Fig. 2 zeigt ein Layout des Speichermediums einer Relativobjektdatei 1, die eine Sektion 12 von Anweisungen 12a und Daten 12b enthält. Sektion 12 wird in einen Speicherblock kopiert, der für die alte Objektcodetabelle 20 zugewiesen wurde (siehe FILES.C, "Initialize"). Jedes Element in Tabelle 20 wird allgemein durch eine horizontale Linie angedeutet, und die Byte-Stelle für jedes Element ist auf der linken Seite zu sehen (Hinweis: Byte-Stellen sind dezimal dargestellt); unterschiedliche Elemente haben unterschiedliche Längen. Das Expansionsmittel 5 weist Speicherkapazität für andere Tabellen zu (siehe Fig. 3): eine neue Objektcodetabelle 30, eine Vorwärtsindextabelle 40, eine Vorwärtssteuerindextabelle 50 und eine Zwischenelement-Offsettabelle 60, die nachfolgend beschrieben werden. Danach wird, beginnend am Anfang der alten Objektcodetabelle 20, jeder Eintrag in der Tabelle 20 verarbeitet.
- Fig. 4 zeigt eine allgemeine Ablauftabelle für das mit dem Expansionsmittel 5 durchgeführte Verfahren. Block 100 gibt die Vorbereitung der Tabellen 20, 30, 40, 50 und 60 (oben beschrieben) an, Block 110 zeigt den Schritt des Identifizierens von Eintrittspunkten zu Funktionen an (siehe INSERT.C, "FindFunctions"). Block 115 zeigt die Expansion aller Funktionen an; die Details des an jeder Funktion durchgeführten Expansionsprozesses sind in der aus den Blöcken 120-190 bestehenden Schleife ersichtlich (siehe INSERT.C, "DoOneFunction").
- In Schritt 120 von Fig. 4 wird das erste Element in der alten Objektcodetabelle gewählt. Fig. 3 zeigt Teile von Speicherplatz, der bei den Schritten 130 bis 200 des Expansionsprozesses betroffen ist. Speicherstellen (Bytes) 1 bis 125 von Tabelle 20 wurden bereits verarbeitet und belegen jetzt Speicherstellen 1 bis 181 der neuen Objektcodetabelle 30. Der nächste Eintrag (eine Objektcodeanweisung in einer Funktion, durch das Kurzzeichen "BEQ +6" angedeutet) an der Stelle 126 in der alten Objektcodetabelle 20 wird dann in Schritt 130 verarbeitet. Dies ist eine Vier-Byte-Anweisung; sie beginnt bei Stelle 126, die nächste Anweisung beginnt bei Stelle 126 + 4 = 130 (dezimal). Zwei Opcode-Bytes werden einfach als BEQ angedeutet, und die "6" ist ein Zwei-Byte- Offset, der auf die bei Stelle 132 beginnende "RTS"-Anweisung zeigt. Das Expansionsmittel 5 bildet einen neuen Codeblock 33 (siehe INSERT.C, "DoOnelnstruction"), der lediglich das BEQ- Statement enthält, da keine zusätzlichen Anweisungen oder Daten eingefügt werden. Der Offset wird durch ein Fragezeichen in der Tabelle 30 angedeutet, weil sein neuer Wert noch nicht bekannt ist. Das Expansionsmittel 5 weist maximal vier Bytes für den Offset zu, obwohl der ursprüngliche Offset nur zwei Bytes war (und der BEQ-Opcode wird geringfügig modifiziert, so dass er einem Vier-Byte-Offset entspricht). Dies erfolgt nach der Expansion, der neue Offset könnte für die Zahl der Bytes des vorherigen Offsets möglicherweise zu groß sein.
- Nunmehr gemeinsam bezugnehmend auf die Fig. 3 und 4, in Schritt 140 wird die Stelle der BEQ-Anweisung in der neuen Objektcodetabelle 30 (Stelle = 182) in der Stelle 126 einer Vorwärtsindextabelle 40 gespeichert. Im Allgemeinen wird die neue Stelle jedes Bytes einer Anweisung in Tabelle 40 gespeichert, aber in diesem Fall befinden sich die einzigen signifikanten Einträge an Stelle 126 von Tabelle 40, was bedeutet, dass das BEQ-Statement jetzt an Stelle 182 von Tabelle 30 und an Stelle 128 von Tabelle 40 beginnt, was bedeutet, dass der Offset des BEQ-Statements jetzt an Stelle 184 von Tabelle 30 beginnt. Die Ellipsen ("...") bedeuten, dass ein oder mehrere Werte vorliegen, aber keine Signifikanz haben. So würde beispielsweise Stelle 129 von Tabelle 40 dem zweiten Byte des BEQ-Offset an Stelle 129 zu Tabelle 20 entsprechen; der Offset wird jedoch von zwei auf vier Bytes expandiert, so dass die individuellen Bytes des Offsets nicht separat indexiert werden können.
- Als Nächstes wird in Schritt 150 die Stelle des neuen Codeblocks 33 (Stelle = 182) in der Vorwärtsindexsteuertabelle 50 gespeichert. Es gibt zwar für die neuen Stellen für jedes Byte des BEQ 6 Statements Platz, aber es ist nur die Stelle des Anfangs des Statements signifikant. Man beachte, dass sich in einigen Expansionsschemata die vorexistierende Anweisung möglicherweise immer am Anfang des neuen Codeblocks befindet, und in diesem Fall würde dieselbe Information in der Vorwärtsindextabelle 40 und in der Vorwärtssteuerindextabelle 50 aufgezeichnet; eine doppelte Aufzeichnung dieser Information würde jedoch eine Platzverschwendung bedeuten. Der beste Ansatz sieht daher eine Vorwärtstabelle vor, die, wie oben erläutert, die beiden separaten Untertabellen, die Vorwärtsindextabelle 40 und die Vorwärtssteuerindextabelle 50 beinhalten kann oder auch nicht.
- Als Nächstes bestimmt in Schritt 160 das Expansionsmittel 5, dass diese Anweisung einen Zwischenelement-Offset enthält (ein Zwischenelement-Offset ist eine Referenz auf eine Anweisung oder ein Datenelement, die/das als Distanz in Bytes von einer zweiten Anweisung oder einem zweiten Datenelement ausgedrückt wird). Diese Bestimmung erfolgt durch Untersuchen des Opcodes der Anweisung (siehe INSERT.C, "RecordPcRelInstr"). Da diese Anweisung einen Zwischenelement-Offset enthält, wird Schritt 170 durchgeführt, so dass die alte Stelle des Offsets (128 in Tabelle 20), die alte Stelle der Basis, von der der Offset gemessen wurde (126 in Tabelle 20), und die alte Größe des Offsets (2 Bytes) alle in der Zwischenelement-Offsettabelle 60 gespeichert werden. Für eine beliebige Anweisung, die den Beginn einer Switch-Tabelle von Zwischenelement-Offsets denotiert, wird jeder Offset in Tabelle 60 wie oben gespeichert, wobei der Anfang der Switch-Tabelle als Basis eingegeben wird (siehe INSERT.C, "DoSwitchTable"). In Schritt 180 wird die Schleife wiederholt, wenn noch unverarbeitete Elemente vorhanden sind. Da es in Tabelle 20 noch unverarbeitete Elemente gibt, wählt Schritt 190 das nächste Element "Add 1, (A0)", und die Schleife wird wieder bei Schritt 130 begonnen.
- Durch Wiederholen der Schritte 130-180 bildet das Expansionsmittel 5 einen neuen Codeblock 35 von der Add- Anweisung und neuen Anweisungen α, β, und γ, die in diesem besonderen Fall vor der Add-Anweisung stehen. Dieser neue Codeblock wird an Stelle 188 der neuen Objektcodetabelle 30 gespeichert, wobei sich die Add-Anweisung an Stelle 194 befindet. Die Stelle der Add-Anweisung innerhalb der neuen Objektcodetabelle 30 (Stelle = 194) wird an der Stelle 130 einer Vorwärtsindextabelle 40 gespeichert. Dies bedeutet, dass das Element, das sich an Stelle 130 der alten Objektcodetabelle 20 befand, sich jetzt an Stelle 194 der neuen Objektcodetabelle 30 befindet. Die Stelle des neuen Codeblocks 35 innerhalb der neuen Objektcodetabelle 30 (Stelle = 188) wird in der Stelle 130 der Vorwärtssteuerindextabelle 50 gespeichert. Dies bedeutet, dass der neue Codeblock, der von dem Element gebildet wurde, der sich an Eintrag 130 der alten Objektcodetabelle 20 befand, sich jetzt an Eintrag 188 der neuen Objektcodetabelle 30 befindet. Die Add-Anweisung enthält keinen Zwischenelement- Offset, so dass nichts in die Tabelle 60 eingegeben wird.
- Dieser Zyklus wird jetzt für das nächste Element in der alten Objektcodetabelle 20 wiederholt, "RTS" (Rückkehr von Subroutine) an Stelle 132. Es wird ein neuer Codeblock 37 gebildet, aber es wird festgestellt, dass es keine neuen Anweisungen mit der Rückgabeanweisung einzufügen gibt, also besteht der neue Codeblock 37 nur aus der Rückkehranweisung. Der neue Codeblock 37 wird an der nächsten verfügbaren Stelle in der neuen Objektcodetabelle 30 gespeichert, an Stelle 198. Die Stelle der Rückkehranweisung innerhalb der neuen Objektcodetabelle 30 wird in der Stelle 132 der Vorwärtsindextabelle 40 gespeichert; die Stelle des neuen Codeblocks 37 innerhalb der neuen Objektcodetabelle 30 wird in der Stelle 132 der Vorwärtssteuerindextabelle 50 gespeichert. Da die Rückkehranweisung und der neue Codeblock 37 identisch sind, wird die Nummer 198 in der Stelle 132 beider Indextabellen gespeichert. In diesem Beispiel enthält die Rückkehranweisung keinen Zwischenelement-Offset, so dass in der Zwischenelement-Offsettabelle 60 nichts gespeichert wird. Unbenannte Konstantendaten werden zuweilen zwischen Funktionen, hinter der letzten Anweisung einer Funktion und vor dem nächsten Eintrittspunkt gespeichert; sie können nach Bedarf verarbeitet oder einfach direkt in die neue Objektcodetabelle kopiert werden.
- Nach dem Durchführen der Schritte 120-190 für alle Elemente in allen Funktionen wiederholt Schritt 195 den Expansionsprozess der Blöcke 120-190 für alle benannten Daten. Der Expansionsprozess ist für Daten etwas einfacher, weil diese keine Offsets enthalten wie die, die von den Blöcken 160-170 gehandhabt werden. Als Nächstes korrigiert das Expansionsmittel 5 in Schritt 200 die Zwischenelement-Offsets (siehe PATCH.C, "PatchPcRel"). Die Zwischenelement-Offsettabelle wird untersucht, und für jeden Satz von Offset/Basis-Stellen in dieser Tabelle wird der Zwischenelement-Offset korrigiert durch: 1. Addieren des angedeuteten Offsets zu seiner Basis, um zu ermitteln, welches Element in der alten Objektcodetabelle 20 von dem Offset angepeilt wurde; 2. Nachsehen der neuen Stelle des angepeilten Elementes anhand der Vorwärtssteuerindextabelle 50, wenn der Offset für einen Programmsteuertransfer verwendet wird (z. B. ein Sprung oder Abruf), ansonsten Verwenden der Vorwärtsindextabelle 40; 3. Nachschlagen der neuen Stellen von Offset und Basis anhand der Vorwärtsindextabelle 40; und 4. schließlich Korrigieren des Offset in der neuen Objektcodetabelle 30 mit der Differenz zwischen der neuen Stelle des angepeilten Elementes und der neuen Stelle der Basis.
- In diesem besonderen Beispiel beinhaltet Schritt 200 das Offset/Basis-Paar 128/126. Der Offset wird an Stelle 128 in Tabelle 20 nachgeschlagen, wo der Wert 6 gefunden wird. Dieser Wert wird zur Basis 126 addiert, so dass sich eine Zielstelle 132 ergibt. Da dieser Offset in einem Programmsteuertransfer- Statement (Abzweigung) verwendet wird, wird die neue Zielstelle in Tabelle 50 nachgeschlagen, so dass sich eine neue Zielstelle 198 ergibt. Die neuen Offset- und Basisstellen werden in Tabelle 40 nachgeschlagen, so dass sich eine neue Basisstelle 182 und eine neue Offsetstelle 184 ergeben. Die Differenz von 198 minus 182, d. h. 16, wird dann an der neuen Offsetstelle 184 gespeichert. Dieser Prozess wird für alle Einträge in Tabelle 60 wiederholt.
- Als Nächstes werden, wenn die Objektdatei Symboltabellen oder Verschiebungstabellen enthält, die korrigiert werden müssen, diese in Schritt 201 Element für Element analysiert und durch Ersetzen alter Elementstellen durch neue Elementstellen ersetzt, wie oben erläutert wurde (siehe auch PATCH.C, "PatchTextReloc" und "PatchdataReloc"). Die neuen Elementstellen werden in der Vorwärtsindextabelle 40 nachgeschlagen (mit Ausnahme von Debugging-Symbolen, für die die neuen Stellen in der Vorwärtssteuerindextabelle 50 nachgeschlagen werden). Jetzt wird eine neue Objektcodedatei 1' mit Hilfe der neuen Objektcodetabelle als Daten/Anweisungssektion unter Verwendung der neuen Symbol- und Verschiebungstabellen (falls korrigiert) und unter Verwendung der übrigen Informationen aus der alten Objektdatei 1 geschrieben.
- Dieser Aspekt der Erfindung betrifft einen Prozess des Verfolgens von Lese- und Schreibvorgängen von Speicherplatz durch ein Anwendungsprogramm. In der bevorzugten Ausgestaltung werden alle Objektdateien des Anwendungsprogramms durch ein Speichermonitor-Ausstattungsprogramm verarbeitet, das das oben beschriebene Expansionsmittel verwendet, und von dem Daten/Anweisungs-Einfügungsprozess, um einen Funktionsabruf vor jeder Anweisung, die einen Speicherzugriff enthält, und vor einigen Anweisungen einzufügen, die den Stapelzeiger ändern. Dadurch werden alle oder im Wesentlichen alle Speicherzugriffe eines bestimmten Programms (nicht einschließlich der Speicherzugriffe für Anweisungsabrufe) zwecks Durchführung einer Fehlerprüfung überwacht. Alle Objektcodedateien für ein ablauffähiges Programm werden verarbeitet (mit Ausnahme einer Bibliothek von Routinen, die von dem Speichermonitor- Ausstattungsprogramm hinzugefügt werden), und Anweisungen werden zum Ausführen des unten beschriebenen Überwachungsschemas hinzugefügt.
- Der allgemeine Ablauf der Implementation eines Überwachungsschemas zur Entdeckung von Fehlern in einem ablauffähigen Programm, indem alle Objektcodedateien für das ablauffähige Programm modifiziert werden, das modifizierte Programm verbunden und dann abgearbeitet wird, ist in Fig. 5 illustriert. Eine erste Objektdatei oder Bibliothek für das ablauffähige Programm wird in Block 300 gewählt. Wenn in Block 310 ermittelt wird, dass die Datei eine einfache Objektdatei anstatt einer Bibliothek ist, dann wird die Objektdatei in Block 320 verarbeitet, um ein Überwachungsschema durch den oben beschriebenen Expansionsprozess zu implementieren; ebenso können die Funktionen innerhalb der Objektdatei wie nachfolgend beschrieben umbenannt werden. Wenn in Block 310 ermittelt wird, dass es sich um eine Bibliothek handelt, dann wird jede Objektdatei, die zu der Bibliothek beiträgt, in Block 330 auf dieselbe Weise verarbeitet, wie eine einfache Objektdatei in Block 320 verarbeitet wird. Dann wird in Block 340 die Bibliothek von den modifizierten Objektdateien neu erstellt. Nach dem Verarbeiten der Objektdatei oder Bibliothek bestimmt Block 350, ob eventuell noch unverarbeitete Dateien für die ablauffähige Datei vorhanden sind. Ist dies der Fall, dann wählt Block 360 eine unverarbeitete Datei, und dann werden die Schritte der Blöcke 310-350 wiederholt. Wenn in Block 350 ermittelt wird, dass alle Dateien für das ursprüngliche ablauffähige Programm verarbeitet sind, dann erfolgt die gesamte notwendige Programmbindung in Block 370, die eine Bindung an eine zusätzliche Bibliotheksdatei einschließlich Funktionen beinhalten kann, die speziell für das Überwachungsschema ausgelegt sind. Das Programm wird dann in Block 380 abgearbeitet; dabei erfolgt die durch den Expansionsprozess hinzugekommene Überwachung.
- In der Speicherzugriffsüberwachungsmethode der bevorzugten Ausgestaltung ermittelt der expandierte Code eine Speicherstatusarray mit einem Eintrag für die meisten Speicherstellen, auf die das Programm gültig zugreifen kann, in denen Zwei-Bit-Array-Einträge für jede solche Speicherstelle zugewiesen sind. Jeder Eintrag zeigt den Status der entsprechenden Speicherstelle an, und es gibt die folgenden drei Zustände: (1) unzugewiesen und uninitialisiert (Statusbits = 11); (2) zugewiesen und uninitialisiert (Statusbits = 01); (3) zugewiesen und initialisiert (Statusbits = 00). Vor jeder vorexistierenden Anweisung, die auf Speicherplatz zugreift oder die den Speicherstatus ändern kann, werden zusätzliche Anweisungen addiert, um die Speicherstatusarray aufrecht zu erhalten und um die Speicherstatusarray zum Prüfen auf Fehler in Bezug auf das Schreiben von unzugewiesenem Speicherplatz und das Lesen von uninitialisiertem oder unzugewiesenem Speicherplatz zu verwenden. Fig. 6 zeigt ein Statusübergangsdiagramm und illustriert die drei Zustände, die eine Speicherstelle haben kann und wie Zustände geändert werden. Status (1) wird durch Bezugsziffer 101, Status (2) durch 102 und Status (3) durch 103 angegeben. Das erste Bit eines Statuscodes gibt an, ob die Speicherstelle unzugewiesen ist; das zweite Bit gibt an, ob die Speicherstelle uninitialisiert ist. Speicherstellen in Status 1 können nicht beschrieben oder gelesen werden; die Stellen in Status 2 können beschrieben aber nicht gelesen werden, und diejenigen in Status 3 können beschrieben und gelesen werden.
- Statuscodes beginnen im Allgemeinen mit 11 (Status 1, unzugewiesen) und ändern sich während der Ausführung des modifizierten Anwendungsprogramms wie folgt: bei einem erfolgreichen Aufruf an "malloc" (eine c- Speicherzuweisungsroutine) sind die Statusbits für jedes Byte auf 01 gesetzt; bei einem erfolgreichen Aufruf an "free" sind die Statusbits für jedes Byte auf 11 gesetzt; bei einem erfolgreichen Aufruf an "realloc" sind die Statusbits für den alten Speicher auf 11 und für den neuen auf 01 gesetzt (die Bits für diesen Teil des neuen Speicherplatzes, der vom alten Speicherplatz initialisiert wurde, sind auf 00 gesetzt). Wenn 1 der Stapelzeiger dekrementiert wird, werden die Statusbits für die Bytes auf dem jetzt zugewiesenen Stapel auf 01 gesetzt. Unmittelbar vor dem Schreiben eines Bytes wird das erste Bit seiner Statusbits geprüft - wenn das Bit gesetzt ist, wird ein Fehler signalisiert, ansonsten wird das lesbare Bit gelöscht (da das Byte jetzt initialisiert wird). Ebenso wird, kurz bevor ein Byte gelesen werden soll, das zweite Bit seiner Statusbits geprüft - wenn das Bit gesetzt ist, wird ein Fehler signalisiert. Ein spezieller Fall ist, kurz bevor ein Byte von einer Speicherstelle auf eine andere kopiert werden soll, wird das Lesen von uninitialisiertem Speicherplatz zugelassen, aber das Ziel wird als uninitialisiert markiert, so dass ein Kopiervorgang an einer Struktur mit uninitialisierten Bytes wie z. B. solche von Compiler-Padding keine Fehlersignalisierung verursacht. In der bevorzugten Ausgestaltung wird die Statusprüfung und -änderung durch eine Gruppe von speziellen Laufzeitfunktionen gehandhabt, die an den entsprechenden Punkten abgerufen werden.
- Fig. 7 repräsentiert den gesamten virtuellen 32-Bit- Adressraum und ist nicht maßstabsgetreu. Die Speicherregion 300 am Fuß des Adressraums, die den statischen Informationen in dem Programm entspricht, beginnt und bleibt in Status 3. Die Speicherregion 300 enthält die Anweisungscodes 301, die Daten 302 und die BSS-Daten 303 (Datenlader - auf null initialisiert). Die Bytes im Haufen 400, die über die Funktionen malloc, realloc und free manipuliert werden, ändern ihren Zustand häufig. Dieser Speicherplatz ist zum Starten in Status 1, geht dann in Status 2, wenn er der malloc-Funktion unterzogen wird, und dann nach dem Schreiben in Status 3; wenn er befreit ist (free), geht er zurück in Status 1. Die Speicherregion 500 ist für den Stapel verfügbar. Speicher 500 ist in Status 1, wenn er sich unter dem Stapelzeiger befindet. Wenn sich der Stapelzeiger abwärts bewegt, werden Teile dieses Speicherplatzes "zugewiesen" (allocated) und befinden sich in Status 2. Wenn der Stapel beschrieben ist, geht der Speicherplatz zurück in Status 3. Wenn sich der Stapelzeiger aufwärts bewegt, geht der Speicherplatz zurück in Status 1. Man könnte jeden Augenblick des Stapelzeigers als Zuweisung oder Zuweisungsaufhebung behandeln und dieselben Routinen aufrufen, die auch für malloc und free aufgerufen werden. Dies verursacht jedoch eine erhebliche Leistungsherabsetzung, weil sich der Stapelzeiger häufig ändert. Eine vereinfachte Weise zum Verfolgen des Status von Speicherplatz in dieser Region mit weniger Statusbitführung besteht darin, die Stelle des referenzierten Speicherplatzes mit dem Stapelzeiger zu vergleichen. Speicherplatz in dieser Region und oberhalb des Stapelzeigers wird in der Statusbittabelle nachgeschlagen; Speicherplatz in dieser Region und unterhalb des Stapelzeigers wird als in Status 1 befindlich angesehen. Gemäß der bevorzugten Ausgestaltung werden Stapelzeiger wie folgt gehandhabt: (a) Nach dem Eintritt in eine Funktion, wo eine Link-Anweisung Stapelraum für die lokalen Variablen der Funktion zuweist, wird ein Aufruf zum Markieren dieses betroffenen Speicherplatzes als Status 2 eingefügt. (b) Wenn ein Argument auf den Stapel geschoben wird, wird ein Aufruf zum Markieren des betroffenen Speicherplatzes als Status 3 eingefügt. (c) Wenn der Stapelzeiger inkrementiert wird (um Stapelraum zurückzugewinnen), geschieht nichts. Dies ist an die Methode zum Nachschlagen der Statusbits für ein bestimmtes Byte gebunden, die die Regel "wenn das Byte auf dem Stapel, aber unter dem Stapelzeiger ist, die Bit-Tabelle ignorieren und die Bits mit Status 1 (unzugewiesen) verwenden" angewendet. (d) Aufrufe an "alloca" werden speziell gehandhabt, und der betroffene Speicherplatz wird auf Status 2 gesetzt.
- Es gibt eine zusätzliche Komplikation für Stapelvariablen. Optimierungscompiler ordnen Code um, um die Leistung zu erhöhen; eine der von ihnen vorgenommenen Optimierungen besteht darin, einfache Zuweisungen aus Schleifen hinaus zu bewegen. Dies kann zuweilen zu einem Zugriff auf eine uninitialisierte Stapelvariable führen, aber das Ergebnis wird nicht verwendet. Leider würde ein überwachtes Programm nicht ermitteln, dass das Ergebnis nicht verwendet wird, und würde einen Fehler signalisieren. Eine solche unnötige Fehlersignalisierung wird dadurch vermieden, dass uninitialisierte Stapelvariablenprüfungen in optimiertem Code durch Markieren lokaler Variablen in dem optimierten Stapelrahmen als initialisiert (d. h. in Zustand 3) gesperrt wird.
- Die Statusbits für den Speicherplatz von 0 bis zur Oberseite des Haufens 400 werden in einer ersten Bit-Array gehalten; die Statusbits für Stapelspeicherplatz 500 werden in einer zweiten Bit-Array gehalten. Virtueller Speicherplatz außerhalb der Speicherregionen 300, 400 und 500 wird zum Speichern dieser Bit-Arrays mit Hilfe des "mmap" Systemrufs erhalten. Zum Finden der Statusbits für ein willkürliches Byte an einer Adresse wird die folgende Methode angewendet: wenn sich die Adresse unter dem oberen Ende des Haufens 400 befindet, ist der Bitindex das Zweifache der Adresse; wenn sich die Adresse in der Stapelspeicherregion 500 befindet, ist der Bit-Index die Adresse minus der Adresse des unteren Endes der Stapelregion 500, dann multipliziert mit 2; ansonsten muss die Adresse eine spezielle Adresse sein, wie z. B. gemeinsamer Speicher, und wird ignoriert.
- Der aktuelle Zustand einer Speicherstelle könnte ohne Verwendung von Statusarrays angedeutet werden. Der an einer Speicherstelle gespeicherte Wert würde den Status dieser Stelle anzeigen. Ein bestimmter Wert würde den unzugewiesenen Zustand (Status 1) repräsentieren, ein anderer Wert würde den zugewiesenen und uninitialisierten Zustand (Status 2) repräsentieren, alle anderen Werte würden Benutzerdaten in Status 3 repräsentieren. Einzelbyte-Werte haben jedoch natürlich keinen signifikanten Bereich, so dass die die Zustände 1 und 2 repräsentierenden Werte häufig in gültigen Benutzerdaten auftreten würden, so dass fälschlicherweise Fehler signalisiert würden. Dieses Problem würde durch die Verwendung von Zwei- oder Vier-Byte-Sequenzen minimiert, um Speicherzustände anzuzeigen, was die Chancen eines zufälligen Auftretens reduziert, aber eine Einzelbyte-Zugriffsprüfung würde dann nicht ohne weiteres unterstützt. Aus diesem Grund wird die Verwendung von einer oder mehreren separaten Statusarrays als bevorzugt angesehen.
- Der Code für Betriebssystemroutinen wird nicht in das Benutzerprogramm eingebunden. Dieser Code steht damit erfindungsgemäß nicht für die Verarbeitung zur Verfügung, und der Speicherstatus-Überwachungscode kann nicht eingefügt werden. Aus diesem Grund muss der Überwachungsprozess spezielle Maßnahmen zum Verfolgen von Systemaufrufen ergreifen, in denen das Betriebssystem direkt auf den Programmspeicher zugreift. Dieselben besonderen Maßnahmen werden auch zum Verfolgen von Haufenmanagementfunktionen "malloc", "free" und "realloc" ergriffen.
- Diese Sonderfunktionen sind in Fig. 8 dargestellt, die einen Prozess zum Abfangen aller Rufe zu einem bestimmten Satz von Funktionen zeigt, indem der Name jeder Definition (gewöhnlich gibt es nur eine) dieser Funktionen modifiziert wird und deren alte Namen durch neue Namen ersetzt werden. Dann werden Interceptor-Funktionen unter den alten Namen bereitgestellt; diese Interceptor-Funktionen rufen gewöhnlich die abgefangenen Funktionen auf und haben einen anderen Code. Bei einem Funktionsnamen, f, und seinem gewünschten Ersatz, F, der keine größere Stringlänge haben darf als f, wird jede Objektdatei auf externe Symbole (Typen N_TEXT und N_EXT) mit der Bezeichnung f abgetastet. Für jeden solchen Fall wird der Name F über den Namen f geschrieben. Wenn der Linker läuft, ist die einzige Definition von f die Interceptor-Funktion, und wenn das Programm abläuft, wird die Interceptor-Funktion f anstelle des ursprünglichen f aufgerufen, das in F umbenannt wurde. Um zu unterstützen, dass der Name von F länger ist als f, kann die String-Tabelle kopiert und erweitert werden, und dann werden alle alten Referenzen, die sich in der Symbolsektion befanden, in die neue String-Tabelle gesetzt.
- In der bevorzugten Ausgestaltung werden die Datensektionen der Objektcodedateien mit zusätzlichen Dummy-Einträgen zwischen jedem Datenelement oder jeder Datenarray expandiert. Diese zusätzlichen Einträge erhalten den Status unzugewiesen und uninitialisiert und unterstützen die Erkennung von Array- Grenzverletzungen und ähnlichen Datenfehlern. Die bevorzugte Ausgestaltung ermittelt auch eine Liste von Speicher- oder Datenelementstellen, die Watchpoints sein sollen, mit denen eine umfassende Überwachung durchgeführt werden soll. Diese zusätzlichen Aspekte der bevorzugten Ausgestaltung werden nachfolgend ausführlicher beschrieben.
- Um viele Array-Grenzverletzungen zu erkennen, werden 8 Byte Speicherplatz vor und hinter jeder Array in den Haufen-, Daten- und bss-Segmenten zugewiesen. Diese 8 Bytes werden als Status 1 (unzugewiesen) markiert, so dass dann, wenn das Programm auf Stellen hinter dem Ende einer Array zugreift, es auf Speicherplatz mit Status 1 zugreift und die Signalisierung eines Fehlers auslöst. Für Haufen-Arrays werden die Statusbits gesetzt, wenn die Array zugewiesen ist. Für statisch zugewiesene Arrays wird ein spezieller 8-Byte-Wert (der wohl kaum zufällig auftritt) zwischen jedes statisch zugewiesene Datenelement eingefügt. Wenn das überwachte Programm die Ausführung beginnt, wird der statisch zugewiesene Speicherplatz auf Auftretensfälle des 8-Byte-Wertes hin untersucht. Die Statusbits für jedes solche Auftreten werden auf Status 1 gesetzt. Die Fehlersignalisierungsroutine sucht nach den speziellen 8-Byte-Werten, um informativere Meldungen zu drucken ("Array-Grenzverletzung" anstatt "Speicherzugriffsverletzung"). Stapelarrays sind derzeit nicht mit den 8-Byte-Markern begrenzt, obwohl dies bei Bedarf geschehen könnte.
- Mit dieser Methode des Verfolgens von Arrays sind jedoch weitere Komplikationen verbunden. Gelegentlich errechnet der Compiler oder der Programmierer die Adresse des Endes einer Array und benutzt sie als Obergrenzenzeiger. Wenn die Array in demselben Dateiobergrenzenzeiger verwendet wird, ist die von dem Compiler gegebene Verschiebungsinformation mit derjenigen identisch, die für eine Referenz auf den Anfang der nächsten Array bereitgestellt wird. Im Allgemeinen könnte jede Link- Zeit-Referenz auf eine Adresse zwischen zwei Daten entweder zum Ende des ersten Datenelementes oder zum Beginn des zweiten beabsichtigt werden. Wenn die Daten getrennt sind, wie im vorangegangenen Absatz beschrieben wurde, dann sind diese beiden Punkte nicht mehr identisch. Die Referenz erfolgt nahezu immer auf den Beginn des zweiten Elementes, und somit kann diese Annahme gemacht werden. Es kann jedoch eine Prüfung durchgeführt werden, um zu ermitteln, ob die Referenz lediglich als Obergrenzenzeiger verwendet wird oder nicht, und die Referenz kann entsprechend korrigiert werden. Eine weitere Alternative besteht darin, es dem Programmierer zu erlauben, die Einfügung des 8-Byte-Datenseparators in Dateien zu unterdrücken, die einen Obergrenzenzeiger für örtlich definierte Arrays verwenden.
- Watchpoints werden dadurch implementiert, dass die Lese- und Schreibstatusbits der zu überwachenden Bytes auf 11 (binär) gesetzt werden und die Stelle des Watchpoint in eine Watchpoint-Liste gesetzt wird. Bei einem Aufruf an die Fehlersignalisierungsroutine wird die geprüfte Adresse mit der Liste aktueller Watchpoints verglichen. Gibt es keine Übereinstimmung, dann wird die Fehlersignalisierungsroutine normal fortgesetzt. Gibt es eine Übereinstimmung, dann befinden sich die zu manipulierenden Statusbits in einer Watchpoint spezifischen Datenstruktur, und die Fehlerroutine ruft die Watchpoint-Routine ab, die typischerweise eine Meldung druckt und ohne Signalisieren eines Fehlers zurückkehrt.
- Die oben beschriebene Speicherzugriffsüberwachung der bevorzugten Ausgestaltung wird durch die in den Fig. 4 und 5 illustrierten Methoden implementiert, wobei die Bildung neuer Codeblocks, Schritt 130 von Fig. 4, gemäß der nachfolgend beschriebenen Methode mit Bezug auf Fig. 10 durchgeführt wird, und wobei Funktionsdefinitionen von Betriebssystemroutinen, die auf Speicherplatz zugreifen, wie oben beschrieben abgefangen werden. Ebenso wird der ursprüngliche Anfangseintrittspunkt in das Programm als Punkt zum Überwachen von Setup-Code umdefiniert, der am Ende auf den ursprünglichen Anfangseintrittspunkt übertragen wird. Der Überwachungs-Setup- Code ist somit der erste Code, der in dem modifizierten ablauffähigen Programm ausgeführt wird, und ermittelt die Speicherstatus-Arrays.
- Bezugnehmend auf Fig. 10, für diese Bildung neuer Codeblöcke bestimmt Block 130.1 die Verarbeitung des Elementes je nach dem, ob es sich um eine Anweisung (Teil einer Funktion) oder um ein Datenelement handelt. Handelt es sich um ein Datenelement, dann kopieren die Blöcke 130.2 bis 130.4 das Datenelement in den neuen Codeblock mit einem Dummy-Eintrag davor und dahinter, um die oben beschriebene Array-Grenzprüfung zu ermöglichen. Für Anweisungen wird in Block 130.5 ermittelt, ob sie auf Speicherplatz zugreifen. Ist dies der Fall, dann fügt Block 130.6 eine Anweisung hinzu, die auf den Stapel der Speicheradresse(n) geschoben wird, auf die zugegriffen werden soll, und Block. 130.7 fügt einen Aufruf an die geeignete spezielle Laufzeitfunktion hinzu, die die richtigen Statusbits prüft und setzt, Fehler signalisiert und Watchpoints handhabt. Schließlich wird in Block 130.8 das Element selbst (die vorexistierende ursprüngliche Anweisung) in die neue Objektcodetabelle kopiert, und Schritt 130 zum Bilden des neuen Codeblocks 130 wird abgeschlossen. Der Rest der Methode des Modifizierens des ablauffähigen Programms und des Überwachens seines Ablaufs ist wie oben mit Bezug auf die Fig. 4 und 5 beschrieben.
- Die zum Implementieren der Überwachung verwendeten Anweisungen könnten anstatt durch Objektcodeverarbeitung auf eine Compiler-gestützte oder Precompiler-gestützte Weise hinzugefügt werden, jedoch jeweils mit einigen Vorteilen und erheblichen Nachteilen. Ein Compiler erzeugt normalerweise während der Kompilation alle notwendigen Informationen zum Durchführen dieser Überwachung; was jedoch grundsätzlich fehlt, ist, dass der Compiler zusätzlichen Code hinzufügt, wie in Fig. 10 illustriert ist. Die Nachteile dieses Ansatzes bestehen darin, dass die Neukompilation für die Fehlerprüfung weitaus mehr Zeit in Anspruch nimmt als die oben beschriebene Objektcodeverarbeitung und dass ein Source-Code-Zugriff auf alle beteiligten Bibliotheken notwendig ist, um eine umfassende und genaue Fehlerprüfung zu gewährleisten. Ein Precompilergestützter Ansatz, der zusätzliche Source-Code-Statements in Source-Code-Dateien einfügen würde, hätte alle Nachteile eines Compiler-gestützten Ansatzes, obwohl er auch Portabilitätsvorteile hätte.
- Ein weiterer alternativer Ansatz wäre der, dass die Erfindung den Überwachungscode direkt in ein zuvor verbundenes Programm einfügt. Da ein ablauffähiges Programm dasselbe Grundformat hat wie eine Relativobjektdatei, könnte das Programm als eine einzige größe Objektdatei verarbeitet werden. Dies würde eine stärker involvierte Totcode-Analyse erfordern, um Daten von Anweisungen zu unterscheiden, und es gäbe sowohl relative als auch absolute Adressen, die aktualisiert werden müssten, anstatt nur relative Adressen (Offsets).
- Es ist zu verstehen, dass die obige Beschreibung lediglich illustrativ und nicht begrenzend ist. Für die Fachperson werden nach einem Studium der obigen Beschreibung viele weitere Ausgestaltungen offensichtlich werden. So könnten beispielsweise Vorkehrungen für einen gemeinsam genutzten Speicher betroffen werden, wie z. B. mit noch einer weiteren Bit-Tabelle, aber auch die Bit-Tabellen sollten dann gemeinsam genutzt werden, und alle Programme, die auf den gemeinsam genutzten Speicherplatz zugreifen, sollten die Statuscodes korrekt führen. Ebenso wäre ein weiteres Beispiel für ein Überwachungsschema, das für die Implementation durch die obige Objektcodeexpansion besonders geeignet wäre, eine Standardprofilierung. Der Umfang der Erfindung ist somit unter Bezugnahme auf die beiliegenden Ansprüche zu sehen, zusammen mit dem vollen Umfang von Äquivalenten, zu denen solche Ansprüche berechtigt sind.
Claims (21)
1. Verfahren zum Signalisieren von Fehlern im
Speicherzugriff durch ein Computerprogramm, wobei das
genannte Verfahren folgendes umfasst: Empfangen eines ersten,
das genannte Computerprogramm bildenden Satzes von
Maschinenanweisungen (1) als Eingang, wobei der genannte
erste Satz von Maschinenanweisungen wenigstens eine
Speicherzugriffsanweisung (33) zum Zugreifen auf eine
Speicherstelle beinhaltet, wobei das Verfahren durch den
folgenden Schritt gekennzeichnet ist: Expandieren des
genannten ersten Satzes von Maschinenanweisungen zum
Generieren (5) eines zweiten Satzes von Maschinenanweisungen
(1'), wobei der genannte Satz von Maschinenanweisungen
wenigstens eine zusätzliche Speicherüberwachungsanweisung
(35) beinhaltet, deren Aufgabe es ist,
Speicherstatusinformationen in Verbindung mit der
Speicherstelle zu prüfen, auf die durch die genannte
Speicherzugriffsanweisung zugegriffen werden soll, und einen
Fehler zu signalisieren, wenn die Speicherstatusinformation
nicht mit der Speicherzugriffsanweisung für die genannte
Speicherstelle übereinstimmt.
2. Verfahren nach Anspruch 1, bei dem dem Computerprogramm
wenigstens eine Speicherüberwachungsanweisung an einer Stelle
hinzugefügt wird, so dass sie jedes Mal dann ausgeführt wird,
wenn die Speicherzugriffsanweisung ausgeführt wird.
3. Verfahren nach Anspruch 1 oder 2, bei dem die
Speicherstatusinformation einen zugewiesenen Zustand und
einen unzugewiesenen Zustand der Speicherstelle anzeigen
kann; wobei ein Fehler signalisiert wird, wenn die genannte
Speicherstatusinformation anzeigt, dass sich die genannte
Speicherstelle in einem unzugewiesenen Zustand befindet.
4. Verfahren nach einem der vorherigen Ansprüche, bei dem
die genannten Speicherzugriffsanweisungen eine Leseanweisung
zum Lesen aus einer Speicherstelle beinhalten und wobei die
genannte Speicherstatusinformation einen zugewiesenen-und-
uninitialisierten Zustand (102) und einen zugewiesenen-und-
initialisierten Zustand (103) anzeigen kann; wobei ein Fehler
signalisiert wird, wenn die Speicherstatusinformation
anzeigt, dass sich eine Speicherstelle, auf die durch eine
Leseanweisung zugegriffen werden soll, in einem zugewiesenen-
und-uninitialisierten Zustand befindet.
5. Verfahren nach einem der vorherigen Ansprüche, ferner
umfassend das Verwalten der Speicherstatusinformation für die
genannte Speicherstelle.
6. Verfahren nach einem der vorherigen Ansprüche, bei dem
die genannten zusätzlichen Speicherüberwachungsanweisungen zu
dem zweiten Satz von Anweisungen mit Hilfe eines Verfahrens
hinzugefügt werden, das die folgenden Schritte umfasst:
a) Bereitstellen einer alten Objektcodetabelle (20), die
den ersten Satz von Anweisungen beinhaltet;
b) Bereitstellen einer neuen Objektcodetabelle (30),
einer Zwischenelement-Offsettabelle (60), einer
Vorwärtsindextabelle (40), einer Vorwärtssteuerindextabelle
(50), wobei die genannten Tabellen zur Speicherung von
Elementen dienen, wobei die genannten Elemente Stellen
innerhalb der Tabellen haben;
c) Ausführen der folgenden Schritte für jedes Element in
der alten Objektcodetabelle:
i) Speichern eines neuen Codeblocks in der neuen
Objektcodetabelle, wobei der genannte neue Codeblock die
zusätzlichen Speicherüberwachungsanweisungen und das Element
umfasst;
ii) Speichern der Stelle des Elementes innerhalb
der neuen Objektcodetabelle in der Vorwärtsindextabelle;
iii) Speichern der Stelle des neuen Codeblocks
innerhalb der neuen Objektcodetabelle in der
Vorwärtssteuerindextabelle; und
iv) für einen Zwischenelementoffset enthaltende
Elemente, Anzeigen des Offsets in der Zwischenelement-
Offsettabelle; und
d) für jeden in der Zwischenelement-Offsettabelle
angezeigten Zwischenelement-Offset, Aktualisieren des
Zwischenelement-Offset anhand der Vorwärtssteuerindextabelle
für die Zwischenelement-Offsets, die für eine
Programmsteuerübertragung sind, und ansonsten anhand der
Vorwärtsindextabelle.
7. Verfahren nach einem der vorherigen Ansprüche, bei dem
der erste und der zweite Satz Anweisungen Objektcode sind.
8. Computersystem, umfassend ein Speichermittel mit
wenigstens einer Speicherstelle; und einen Prozessor, der die
Aufgabe hat, einen ersten Satz von Maschinenanweisungen (1)
als Eingang zu empfangen, wobei der genannte erste Satz von
Maschinenanweisungen eine Speicherzugriffsanweisung (33) zum
Zugreifen auf die wenigstens eine Speicherstelle beinhaltet;
wobei das System dadurch gekennzeichnet ist, dass es
folgendes umfasst: ein Mittel (5) zum Expandieren des
genannten ersten Satzes von Maschinenanweisungen zum
Generieren eines zweiten Satzes von Maschinenanweisungen
(1'), wobei das Mittel zum Expandieren des zweiten Satzes von
Maschinenanweisungen die Aufgabe hat, zusätzliche
Speicherüberwachungsanweisungen (35) zu generieren, die die
Aufgabe haben, Speicherstatusinformationen in Verbindung mit
der wenigstens einen Speicherstelle zu prüfen, auf die durch
die genannte Speicherzugriffsanweisung zugegriffen werden
soll, und einen Fehler zu signalisieren, wenn die
Speicherstatusinformation nicht mit der
Speicherzugriffsanweisung für die genannte wenigstens eine
Speicherstelle übereinstimmt.
9. Computersystem nach Anspruch 8, bei dem die genannte
wenigstens eine Speicherüberwachungsanweisung zu dem
genannten ersten Satz von Maschinenanweisungen an einer
Stelle hinzugefügt wird, so dass sie jedes Mal ausgeführt
wird, wenn die Speicherzugriffsanweisung ausgeführt wird.
10. Computersystem nach Anspruch 8 oder 9, bei dem die
Speicherstatusinformation einen zugewiesenen Zustand und
einen unzugewiesenen Zustand der Speicherstelle anzeigen
kann; wobei ein Fehler signalisiert wird, wenn die genannte
Speicherstatusinformation anzeigt, dass sich die genannte
Speicherstelle in einem unzugewiesenen Zustand befindet.
11. Computersystem nach einem der Ansprüche 8 bis 10, bei
dem die genannten Speicherzugriffsanweisungen eine
Leseanweisung zum Lesen von einer Speicherstelle beinhalten
und wobei die genannte Speicherstatusinformation einen
zugewiesenen-und-uninitialisierten Zustand (102) und einen
zugewiesenen-und-initialisierten Zustand (103) anzeigen kann,
wobei ein Fehler signalisiert wird, wenn die
Speicherstatusinformation anzeigt, dass sich eine
Speicherstelle, auf die durch eine Leseanweisung zugegriffen
werden soll, in einem zugewiesenen-und-uninitialisierten
Zustand befindet.
12. Computersystem nach einem der Ansprüche 8 bis 11, bei
dem der Prozessor ein Mittel beinhaltet, das die Aufgabe hat,
die Speicherstatusinformation zu verwalten.
13. Computersystem nach einem der Ansprüche 8 bis 12, bei
dem der erste und der zweite Satz Anweisungen Objektcode
sind.
14. Computerprogramm, das die Aufgabe hat, einen ersten Satz
von Maschinenanweisungen (1) als Eingang zu empfangen, wobei
der genannte erste Satz von Maschinenanweisungen eine
Speicherzugriffsanweisung (33) zum Zugreifen auf eine
Speicherstelle beinhaltet, und das dadurch gekennzeichnet
ist, dass es die Aufgabe hat, den genannten ersten Satz von
Maschinenanweisungen zum Generieren eines zweiten Satzes von
Maschinenanweisungen (1') zu expandieren, der zusätzliche
Speicherüberwachungsanweisungen (35) beinhaltet, die die
Aufgabe haben, die Speicherstatusinformation in Verbindung
mit der Speicherstelle zu prüfen, auf die durch die genannte
Speicherzugriffsanweisung zugegriffen werden soll, und um
einen Fehler zu signalisieren, wenn die
Speicherstatusinformation nicht mit der
Speicherzugriffsinformation für die genannte Speicherstelle
übereinstimmt.
15. Computerprogramm nach Anspruch 14, das die Aufgabe hat,
wenigstens eine zusätzliche Speicherüberwachungsanweisung zum
ersten Satz von Maschinenanweisungen an einer Stelle
hinzuzufügen, so dass sie jedes Mal ausgeführt wird, wenn die
Speicherzugriffsanweisung ausgeführt wird.
16. Computerprogramm nach Anspruch 14 oder 15, bei dem die
Speicherstatusinformation einen zugewiesenen Zustand und
einen unzugewiesenen Zustand der Speicherstelle anzeigen
kann, wobei ein Fehler signalisiert wird, wenn die genannte
Speicherstatusinformation anzeigt, dass sich die genannte
Speicherstelle in einem unzugewiesenen Zustand befindet.
17. Computerprogramm nach einem der Ansprüche 14 bis 16, bei
dem die genannten Speicherzugriffsanweisungen eine
Leseanweisung zum Lesen von einer Speicherstelle beinhalten,
und wobei die genannte Speicherstatusinformation einen
zugewiesenen-und uninitialisierten Zustand (102) und einen
zugewiesenen-und-initialisierten Zustand (103) anzeigen kann,
wobei ein Fehler signalisiert wird, wenn die
Speicherstatusinformation anzeigt, dass sich eine
Speicherstelle, auf die durch eine Leseanweisung zugegriffen
werden soll, in einem zugewiesenen-und uninitialisierten
Zustand befindet.
18. Computerprogramm nach einem der Ansprüche 14 bis 17, das
die Aufgabe hat, die Speicherstatusinformation für die
genannte Speicherstelle zu verwalten.
19. Computerprogramm nach einem der Ansprüche 14 bis 18, bei
dem die genannten zusätzlichen
Speicherüberwachungsanweisungen zum zweiten Satz von
Anweisungen mit Hilfe eines Verfahrens hinzugefügt werden,
das die folgenden Schritte umfasst:
a) Bereitstellen einer alten Objektcodetabelle (20), die
den ersten Satz von Anweisungen enthält;
b) Bereitstellen einer neuen Objektcodetabelle (30),
einer Zwischenelement-Offsettabelle (60), einer
Vorwärtsindextabelle (40), einer Vorwärtssteuerindextabelle
(50), wobei die genannten Tabellen zur Speicherung von
Elementen dienen, wobei die genannten Elemente Stellen
innerhalb der Tabellen haben;
c) Durchführen der folgenden Schritte für jedes Element
in der alten Objektcodetabelle:
i) Speichern eines neuen Codeblocks in der neuen
Objektcodetabelle, wobei der genannte neue Codeblock die
zusätzlichen Speicherüberwachungsanweisungen und das Element
umfasst;
ii) Speichern der Stelle des Elementes innerhalb
der neuen Objektcodetabelle in der Vorwärtsindextabelle;
iii) Speichern der Stelle des neuen Codeblocks
innerhalb der neuen Objektcodetabelle in der
Vorwärtssteuertabelle; und
iv) für einen Zwischenelement-Offset enthaltende
Elemente, Anzeigen des Offset in der Zwischenelement-
Offsettabelle; und
d) für jeden in der Zwischenelement-Offsettabelle
angezeigten Zwischenelement-Offset, Aktualisieren des
Zwischenelement-Offsets anhand der Vorwärtssteuerindextabelle
für die Zwischenelement-Offsets, die für eine
Programmsteuerübertragung sind, und ansonsten anhand der
Vorwärtsindextabelle.
20. Computerprogramm nach einem der Ansprüche 14 bis 19, bei
dem der erste und der zweite Satz Anweisungen Objektcode
sind.
21. Computerspeichermedium, auf dem ein Computerprogramm
aufgezeichnet ist, das die Aufgabe hat, Fehler im
Speicherzugriff durch dieses zu signalisieren, wobei das
Computerprogramm die folgende Aufgabe hat:
Empfangen eines ersten Satzes von Maschinenanweisungen
(1) als Eingang, wobei der genannte erste Satz von
Maschinenanweisungen eine Speicherzugriffsanweisung (33) zum
Zugreifen auf eine Speicherstelle beinhaltet, und dadurch
gekennzeichnet, dass es die folgende Aufgabe hat: Expandieren
des genannten ersten Satzes von Maschinenanweisungen zum
Generieren eines zweiten Satzes von Maschinenanweisungen
(1'), der zusätzliche Speicherüberwachungsanweisungen (35)
beinhaltet, die die Aufgabe haben, die
Speicherstatusinformation in Verbindung mit der
Speicherstelle zu prüfen, auf die von der genannten
Speicherzugriffsanweisung zugegriffen werden soll, und einen
Fehler zu signalisieren, wenn die Speicherstatusinformation
nicht mit der Speicherzugriffsanweisung für die genannte
Speicherstelle übereinstimmt.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US07/718,573 US5193180A (en) | 1991-06-21 | 1991-06-21 | System for modifying relocatable object code files to monitor accesses to dynamically allocated memory |
PCT/US1992/004672 WO1993000633A1 (en) | 1991-06-21 | 1992-06-05 | Method and apparatus for modifying relocatable object code files and monitoring programs |
Publications (2)
Publication Number | Publication Date |
---|---|
DE69232761D1 DE69232761D1 (de) | 2002-10-10 |
DE69232761T2 true DE69232761T2 (de) | 2003-04-24 |
Family
ID=24886584
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE69232761T Expired - Lifetime DE69232761T2 (de) | 1991-06-21 | 1992-06-05 | Verfahren und vorrichtung zur aenderung von dynamische zuweisbaren objektcodedateien |
Country Status (6)
Country | Link |
---|---|
US (7) | US5193180A (de) |
EP (1) | EP0591360B1 (de) |
AU (1) | AU2188792A (de) |
CA (1) | CA2111958C (de) |
DE (1) | DE69232761T2 (de) |
WO (1) | WO1993000633A1 (de) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8438558B1 (en) | 2009-03-27 | 2013-05-07 | Google Inc. | System and method of updating programs and data |
Families Citing this family (393)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0816877B2 (ja) * | 1991-06-10 | 1996-02-21 | インターナショナル・ビジネス・マシーンズ・コーポレイション | データ処理システム用資源データの実時間捕獲及び減縮方法及びシステム |
US5193180A (en) * | 1991-06-21 | 1993-03-09 | Pure Software Inc. | System for modifying relocatable object code files to monitor accesses to dynamically allocated memory |
US5367683A (en) * | 1992-06-26 | 1994-11-22 | Digital Equipment Corporation | Smart recompilation of performing matchup/difference after code generation |
US5625822A (en) * | 1992-06-26 | 1997-04-29 | Digital Equipment Corporation | Using sorting to do matchup in smart recompilation |
US5535392A (en) * | 1992-06-26 | 1996-07-09 | Digital Equipment Corporation | Using hint generation to cause portions of object files to remain the same |
US5446899A (en) * | 1992-06-26 | 1995-08-29 | Digital Equipment Corporation | Hint generation in smart recompilation |
JPH06103075A (ja) * | 1992-07-06 | 1994-04-15 | Internatl Business Mach Corp <Ibm> | オブジェクト指向適用業務 |
US5685003A (en) * | 1992-12-23 | 1997-11-04 | Microsoft Corporation | Method and system for automatically indexing data in a document using a fresh index table |
US5559980A (en) * | 1993-03-18 | 1996-09-24 | Lucent Technologies Inc. | Method and apparatus for detecting references to deallocated memory in a dynamic memory allocation system |
US6219830B1 (en) * | 1993-03-23 | 2001-04-17 | Apple Computer, Inc. | Relocatable object code format and method for loading same into a computer system |
WO1994022078A2 (en) * | 1993-03-23 | 1994-09-29 | Apple Computer, Inc. | Apparatus and method for a relocatable file format |
US6151701A (en) * | 1997-09-30 | 2000-11-21 | Ahpah Software, Inc. | Method for reconstructing debugging information for a decompiled executable file |
US5546586A (en) * | 1993-05-06 | 1996-08-13 | Apple Computer, Inc. | Method and apparatus for vectorizing the contents of a read only memory device without modifying underlying source code |
US5481713A (en) * | 1993-05-06 | 1996-01-02 | Apple Computer, Inc. | Method and apparatus for patching code residing on a read only memory device |
JPH06332680A (ja) * | 1993-05-21 | 1994-12-02 | Tadao Shogetsu | プログラム自動生成装置 |
CA2097540C (en) * | 1993-06-01 | 1998-05-12 | William G. O'farrell | Accessing remote data objects in a distributed memory environment |
US6126329A (en) * | 1993-06-08 | 2000-10-03 | Rational Software Coporation | Method and apparatus for accurate profiling of computer programs |
US5408650A (en) * | 1993-06-29 | 1995-04-18 | Digital Equipment Corporation | Memory analysis system for dynamically displaying memory allocation and de-allocation events associated with an application program |
DE4334313A1 (de) * | 1993-10-08 | 1995-04-13 | Sel Alcatel Ag | Verfahren zum Verwalten eines Sprachspeichers und Vorrichtung dafür |
US6263488B1 (en) | 1993-12-03 | 2001-07-17 | International Business Machines Corporation | System and method for enabling software monitoring in a computer system |
US5596713A (en) * | 1993-12-08 | 1997-01-21 | Zenith Data Systems Corporation | Method to prevent data loss in an electrically erasable read only memory |
US5729676A (en) * | 1993-12-10 | 1998-03-17 | Nec Corporation | Method of generating data for evaluating programs |
US5581697A (en) * | 1994-01-28 | 1996-12-03 | Sun Microsystems, Inc. | Method and apparatus for run-time error checking using dynamic patching |
US5675803A (en) * | 1994-01-28 | 1997-10-07 | Sun Microsystems, Inc. | Method and apparatus for a fast debugger fix and continue operation |
US5590329A (en) * | 1994-02-04 | 1996-12-31 | Lucent Technologies Inc. | Method and apparatus for detecting memory access errors |
US5604895A (en) * | 1994-02-22 | 1997-02-18 | Motorola Inc. | Method and apparatus for inserting computer code into a high level language (HLL) software model of an electrical circuit to monitor test coverage of the software model when exposed to test inputs |
US5539907A (en) * | 1994-03-01 | 1996-07-23 | Digital Equipment Corporation | System for monitoring computer system performance |
US5583988A (en) * | 1994-03-09 | 1996-12-10 | National Instruments Corporation | Method and apparatus for providing runtime checking features in a compiled programming development environment |
US5644709A (en) * | 1994-04-21 | 1997-07-01 | Wisconsin Alumni Research Foundation | Method for detecting computer memory access errors |
JP2757777B2 (ja) * | 1994-05-26 | 1998-05-25 | 住友金属工業株式会社 | メモリの不正アクセス検出方法及びシステム |
US5528753A (en) * | 1994-06-30 | 1996-06-18 | International Business Machines Corporation | System and method for enabling stripped object software monitoring in a computer system |
US5613063A (en) * | 1994-07-01 | 1997-03-18 | Digital Equipment Corporation | Method and apparatus for checking validity of memory operations |
US5689712A (en) * | 1994-07-27 | 1997-11-18 | International Business Machines Corporation | Profile-based optimizing postprocessors for data references |
US5694539A (en) * | 1994-08-10 | 1997-12-02 | Intrinsa Corporation | Computer process resource modelling method and apparatus |
US6006033A (en) * | 1994-08-15 | 1999-12-21 | International Business Machines Corporation | Method and system for reordering the instructions of a computer program to optimize its execution |
US5542078A (en) * | 1994-09-29 | 1996-07-30 | Ontos, Inc. | Object oriented data store integration environment for integration of object oriented databases and non-object oriented data facilities |
US5621912A (en) * | 1994-12-29 | 1997-04-15 | International Business Machines Corporation | Method and apparatus for enabling monitoring of guests and native operating systems |
EP0729097A1 (de) * | 1995-02-07 | 1996-08-28 | Sun Microsystems, Inc. | Verfahren und Vorrichtung zur Überwachung der Speicherzugriffe eines Vielfadenprogramms |
US5710724A (en) * | 1995-04-20 | 1998-01-20 | Digital Equipment Corp. | Dynamic computer performance monitor |
US5619698A (en) * | 1995-05-05 | 1997-04-08 | Apple Computer, Inc. | Method and apparatus for patching operating systems |
US5787447A (en) * | 1995-05-08 | 1998-07-28 | Sun Microsystems, Inc. | Memory allocation maintaining ordering across multiple heaps |
US5812828A (en) * | 1995-06-01 | 1998-09-22 | Centerline Software, Inc. | Function simulation |
EP0830611A4 (de) * | 1995-06-02 | 2007-05-09 | Cisco Systems Inc | Telekontrolle von computerprogrammen |
US5867701A (en) * | 1995-06-12 | 1999-02-02 | Intel Corporation | System for inserting a supplemental micro-operation flow into a macroinstruction-generated micro-operation flow |
US5778169A (en) * | 1995-08-07 | 1998-07-07 | Synopsys, Inc. | Computer system having improved regression testing |
US6021272A (en) * | 1995-10-04 | 2000-02-01 | Platinum Technology, Inc. | Transforming and manipulating program object code |
FI103155B (fi) | 1995-10-11 | 1999-04-30 | Nokia Telecommunications Oy | Menetelmä tietokoneohjattujen palvelujen tuottamiseksi |
WO1997014096A1 (en) * | 1995-10-13 | 1997-04-17 | Sevone Software, Inc. | System and method for debugging computer software |
EP0778524A1 (de) * | 1995-11-17 | 1997-06-11 | Nec Corporation | Verfahren und Vorrichtung zur Bewertung eines Programms |
US5802265A (en) * | 1995-12-01 | 1998-09-01 | Stratus Computer, Inc. | Transparent fault tolerant computer system |
US5758061A (en) * | 1995-12-15 | 1998-05-26 | Plum; Thomas S. | Computer software testing method and apparatus |
US6085233A (en) * | 1995-12-29 | 2000-07-04 | Pankosmion, Inc. | System and method for cellular network computing and communications |
US5909580A (en) * | 1996-02-08 | 1999-06-01 | Inprise Corporation | Development system and methods with direct compiler support for detecting invalid use and management of resources and memory at runtime |
US5907709A (en) * | 1996-02-08 | 1999-05-25 | Inprise Corporation | Development system with methods for detecting invalid use and management of resources and memory at runtime |
US6128771A (en) * | 1996-02-09 | 2000-10-03 | Sun Microsystems, Inc. | System and method for automatically modifying database access methods to insert database object handling instructions |
US5875318A (en) * | 1996-04-12 | 1999-02-23 | International Business Machines Corporation | Apparatus and method of minimizing performance degradation of an instruction set translator due to self-modifying code |
US5978892A (en) * | 1996-05-03 | 1999-11-02 | Digital Equipment Corporation | Virtual memory allocation in a virtual address space having an inaccessible gap |
US5802585A (en) * | 1996-07-17 | 1998-09-01 | Digital Equipment Corporation | Batched checking of shared memory accesses |
US5787480A (en) * | 1996-07-17 | 1998-07-28 | Digital Equipment Corporation | Lock-up free data sharing |
US5761729A (en) * | 1996-07-17 | 1998-06-02 | Digital Equipment Corporation | Validation checking of shared memory accesses |
US5848275A (en) * | 1996-07-29 | 1998-12-08 | Silicon Graphics, Inc. | Compiler having automatic common blocks of memory splitting |
US5949972A (en) * | 1996-08-23 | 1999-09-07 | Compuware Corporation | System for memory error checking in an executable |
US6701519B1 (en) * | 2000-04-12 | 2004-03-02 | Compuware Corporation | Managing hardware and software configuration information of systems being tested |
US6186677B1 (en) | 1996-08-27 | 2001-02-13 | Compuware Corporation | Byte code instrumentation |
US5987249A (en) * | 1996-08-27 | 1999-11-16 | Numega Technologies | IR code instrumentation |
US5870607A (en) * | 1996-09-11 | 1999-02-09 | Brown University Research Foundation | Method and apparatus for selective replay of computer programs |
US6513154B1 (en) | 1996-10-21 | 2003-01-28 | John R. Porterfield | System and method for testing of computer programs in programming effort |
US5923878A (en) * | 1996-11-13 | 1999-07-13 | Sun Microsystems, Inc. | System, method and apparatus of directly executing an architecture-independent binary program |
US6141698A (en) * | 1997-01-29 | 2000-10-31 | Network Commerce Inc. | Method and system for injecting new code into existing application code |
US6654879B1 (en) * | 1997-01-30 | 2003-11-25 | Northbrook Services | Method and apparatus for analyzing code for out-of-range data involving base and seed tables/lists |
US6009269A (en) * | 1997-03-10 | 1999-12-28 | Digital Equipment Corporation | Detecting concurrency errors in multi-threaded programs |
US5950009A (en) * | 1997-03-10 | 1999-09-07 | International Business Machines Coporation | Method and apparatus for profile-based reordering of program portions in a computer program |
US5982807A (en) | 1997-03-17 | 1999-11-09 | Harris Corporation | High data rate spread spectrum transceiver and associated methods |
US6029004A (en) * | 1997-03-17 | 2000-02-22 | International Business Machines Corporation | Method and apparatus for modular reordering of portions of a computer program based on profile data |
US5960198A (en) * | 1997-03-19 | 1999-09-28 | International Business Machines Corporation | Software profiler with runtime control to enable and disable instrumented executable |
US6026234A (en) * | 1997-03-19 | 2000-02-15 | International Business Machines Corporation | Method and apparatus for profiling indirect procedure calls in a computer program |
US6631518B1 (en) * | 1997-03-19 | 2003-10-07 | International Business Machines Corporation | Generating and utilizing organized profile information |
US5974249A (en) * | 1997-03-24 | 1999-10-26 | Symantec Corporation | Zero footprint method and apparatus for expanding allocated memory space of a process using a virtual memory area |
US5898850A (en) * | 1997-03-31 | 1999-04-27 | International Business Machines Corporation | Method and system for executing a non-native mode-sensitive instruction within a computer system |
US6073256A (en) * | 1997-04-11 | 2000-06-06 | Preview Systems, Inc. | Digital product execution control |
US6272636B1 (en) | 1997-04-11 | 2001-08-07 | Preview Systems, Inc | Digital product execution control and security |
US6149318A (en) * | 1997-04-15 | 2000-11-21 | Samuel C. Kendall | Link-time and run-time error detection, and program instrumentation |
US5948113A (en) * | 1997-04-18 | 1999-09-07 | Microsoft Corporation | System and method for centrally handling runtime errors |
US5903899A (en) * | 1997-04-23 | 1999-05-11 | Sun Microsystems, Inc. | System and method for assisting exact Garbage collection by segregating the contents of a stack into sub stacks |
US5848423A (en) * | 1997-04-23 | 1998-12-08 | Sun Microsystems, Inc. | Garbage collection system and method for locating root set pointers in method activation records |
US6038572A (en) * | 1997-04-23 | 2000-03-14 | Sun Microsystems, Inc. | Method and apparatus for localizing nodes in a garbage collected carded heap |
US5930807A (en) * | 1997-04-23 | 1999-07-27 | Sun Microsystems | Apparatus and method for fast filtering read and write barrier operations in garbage collection system |
US5900001A (en) * | 1997-04-23 | 1999-05-04 | Sun Microsystems, Inc. | Method and apparatus for optimizing exact garbage collection using a bifurcated data structure |
US5911144A (en) * | 1997-04-23 | 1999-06-08 | Sun Microsystems, Inc. | Method and apparatus for optimizing the assignment of hash values to nodes residing in a garbage collected heap |
US6115782A (en) * | 1997-04-23 | 2000-09-05 | Sun Micosystems, Inc. | Method and apparatus for locating nodes in a carded heap using a card marking structure and a node advance value |
US5920876A (en) * | 1997-04-23 | 1999-07-06 | Sun Microsystems, Inc. | Performing exact garbage collection using bitmaps that identify pointer values within objects |
US5909579A (en) * | 1997-04-23 | 1999-06-01 | Sun Microsystems, Inc. | Method and apparatus for encoding and decoding delta encoded information to locate live pointers in program data stacks |
US6101580A (en) * | 1997-04-23 | 2000-08-08 | Sun Microsystems, Inc. | Apparatus and method for assisting exact garbage collection by using a stack cache of tag bits |
US5915255A (en) * | 1997-04-23 | 1999-06-22 | Sun Microsystems, Inc. | Method and apparatus for referencing nodes using links |
US5903900A (en) * | 1997-04-23 | 1999-05-11 | Sun Microsystems, Inc. | Method and apparatus for optimizing exact garbage collection of array nodes in a carded heap |
US5893121A (en) * | 1997-04-23 | 1999-04-06 | Sun Microsystems, Inc. | System and method for swapping blocks of tagged stack entries between a tagged stack cache and an untagged main memory storage |
US6199075B1 (en) | 1997-05-30 | 2001-03-06 | Sun Microsystems, Inc. | Method and apparatus for generational garbage collection of a heap memory shared by multiple processors |
US6094664A (en) * | 1997-05-30 | 2000-07-25 | Sun Microsystems | Method and apparatus for optimizing the null pointer exception in an object-oriented programming environment with statically typed variables |
US5983337A (en) * | 1997-06-12 | 1999-11-09 | Advanced Micro Devices, Inc. | Apparatus and method for patching an instruction by providing a substitute instruction or instructions from an external memory responsive to detecting an opcode of the instruction |
US5937402A (en) * | 1997-06-19 | 1999-08-10 | Ontos, Inc. | System for enabling access to a relational database from an object oriented program |
US6105040A (en) * | 1997-06-30 | 2000-08-15 | Sun Microsystems, Inc. | Method and apparatus for managing stored objects |
US5953531A (en) * | 1997-07-25 | 1999-09-14 | International Business Machines Corporation | Method of, system for, and computer program product for minimizing loop execution time by optimizing block/tile sizes |
US6282701B1 (en) * | 1997-07-31 | 2001-08-28 | Mutek Solutions, Ltd. | System and method for monitoring and analyzing the execution of computer programs |
US6286130B1 (en) | 1997-08-05 | 2001-09-04 | Intel Corporation | Software implemented method for automatically validating the correctness of parallel computer programs |
JPH1185526A (ja) * | 1997-09-12 | 1999-03-30 | Hitachi Ltd | プログラムロード方法 |
US6012065A (en) * | 1997-09-30 | 2000-01-04 | Pitney Bowes Inc. | Method and system for accessing carrier data |
US6873978B1 (en) | 1997-10-01 | 2005-03-29 | Pitney Bowes Inc. | Event interface for a carrier manager system |
US6910047B1 (en) | 1997-10-01 | 2005-06-21 | Pitney Bowes Inc. | Method and system for changing rating data via internet or modem in a carrier management system |
US6047125A (en) | 1997-10-01 | 2000-04-04 | Sun Microsystems, Inc. | Garbage collection system for improved use of memory by removal of reference conflicts |
WO1999039261A1 (en) * | 1997-10-09 | 1999-08-05 | The Learning Company | Windows api trapping system |
US6321376B1 (en) * | 1997-10-27 | 2001-11-20 | Ftl Systems, Inc. | Apparatus and method for semi-automated generation and application of language conformity tests |
US6128774A (en) * | 1997-10-28 | 2000-10-03 | Necula; George C. | Safe to execute verification of software |
EP1423792A4 (de) * | 1997-10-29 | 2009-05-27 | Symantec Operating Corp | Interaktives fehlerkorrektursystem mit fehlerkorrektur-datenbasissystem |
US6938245B1 (en) | 1997-10-29 | 2005-08-30 | Veritas Operating Corporation | Interactive debugging system with debug data base system |
US5949993A (en) * | 1997-10-31 | 1999-09-07 | Production Languages Corporation | Method for the generation of ISA simulators and assemblers from a machine description |
US6314564B1 (en) | 1997-11-17 | 2001-11-06 | Agere Systems Guardian Corp. | Method for resolving arbitrarily complex expressions at link-time |
US6560773B1 (en) * | 1997-12-12 | 2003-05-06 | International Business Machines Corporation | Method and system for memory leak detection in an object-oriented environment during real-time trace processing |
US6338159B1 (en) * | 1997-12-12 | 2002-01-08 | International Business Machines Corporation | System and method for providing trace information |
US5911073A (en) * | 1997-12-23 | 1999-06-08 | Hewlett-Packard Company | Method and apparatus for dynamic process monitoring through an ancillary control code system |
US6334213B1 (en) | 1998-01-20 | 2001-12-25 | Preview Systems | Merging of separate executable computer programs to form a single executable computer program |
US6505212B2 (en) | 1998-02-04 | 2003-01-07 | Interwoven Inc | System and method for website development |
JP3178403B2 (ja) * | 1998-02-16 | 2001-06-18 | 日本電気株式会社 | プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体 |
US6230316B1 (en) | 1998-04-17 | 2001-05-08 | Symantec Corporation | Patching rebased and realigned executable files |
US6343375B1 (en) * | 1998-04-24 | 2002-01-29 | International Business Machines Corporation | Method for optimizing array bounds checks in programs |
US6164841A (en) * | 1998-05-04 | 2000-12-26 | Hewlett-Packard Company | Method, apparatus, and product for dynamic software code translation system |
US6189141B1 (en) | 1998-05-04 | 2001-02-13 | Hewlett-Packard Company | Control path evaluating trace designator with dynamically adjustable thresholds for activation of tracing for high (hot) activity and low (cold) activity of flow control |
US6148437A (en) * | 1998-05-04 | 2000-11-14 | Hewlett-Packard Company | System and method for jump-evaluated trace designation |
US6230311B1 (en) * | 1998-06-12 | 2001-05-08 | International Business Machines Corporation | Apparatus and method for disabling methods called on an object |
US6216237B1 (en) * | 1998-06-19 | 2001-04-10 | Lucent Technologies Inc. | Distributed indirect software instrumentation |
US6110227A (en) * | 1998-06-24 | 2000-08-29 | Microsoft Corporation | Systems and methods for pre-processing variable initializers |
US6158047A (en) * | 1998-07-08 | 2000-12-05 | Hewlett-Packard Company | Client/server system for fast, user transparent and memory efficient computer language translation |
JP3280332B2 (ja) * | 1998-07-10 | 2002-05-13 | インターナショナル・ビジネス・マシーンズ・コーポレーション | ループに対するバージョニングを実行する方法及び装置、配列レンジ・チェックに関する情報をベーシック・ブロック内において収集する方法及び装置、配列レンジ・チェックに関する情報を変更する方法、配列レンジ・チェック最適化方法、配列レンジ・チェックのためのコードを生成する方法、不要配列レンジ・チェック除去方法及び装置、配列レンジ・チェックを選択する方法、配列レンジ・チェック変更方法、配列レンジ・チェック収集方法、及び配列レンジ・チェック取扱判断方法 |
US7260817B2 (en) * | 1999-07-09 | 2007-08-21 | International Business Machines Corporation | Method using array range check information for generating versioning code before a loop for execution |
US6490721B1 (en) | 1998-07-14 | 2002-12-03 | Oc Systems Incorporated | Software debugging method and apparatus |
US6253215B1 (en) | 1998-08-17 | 2001-06-26 | Sun Microsystems | Method, apparatus, and article of manufacture for facilitating resource management for applications having two types of program code |
IL125846A0 (en) * | 1998-08-19 | 1999-04-11 | Emony | Incremental program update |
US6260187B1 (en) | 1998-08-20 | 2001-07-10 | Wily Technology, Inc. | System for modifying object oriented code |
US6223339B1 (en) * | 1998-09-08 | 2001-04-24 | Hewlett-Packard Company | System, method, and product for memory management in a dynamic translator |
US6381735B1 (en) | 1998-10-02 | 2002-04-30 | Microsoft Corporation | Dynamic classification of sections of software |
US6629123B1 (en) | 1998-10-02 | 2003-09-30 | Microsoft Corporation | Interception of unit creation requests by an automatic distributed partitioning system |
US6499137B1 (en) * | 1998-10-02 | 2002-12-24 | Microsoft Corporation | Reversible load-time dynamic linking |
US6546553B1 (en) | 1998-10-02 | 2003-04-08 | Microsoft Corporation | Service installation on a base function and provision of a pass function with a service-free base function semantic |
US6988271B2 (en) * | 1998-10-02 | 2006-01-17 | Microsoft Corporation | Heavyweight and lightweight instrumentation |
US6983463B1 (en) | 1998-10-02 | 2006-01-03 | Microsoft Corporation | Network independent profiling of applications for automatic partitioning and distribution in a distributed computing environment |
US6381628B1 (en) | 1998-10-02 | 2002-04-30 | Microsoft Corporation | Summarized application profiling and quick network profiling |
US7039919B1 (en) | 1998-10-02 | 2006-05-02 | Microsoft Corporation | Tools and techniques for instrumenting interfaces of units of a software program |
GB9825102D0 (en) * | 1998-11-16 | 1999-01-13 | Insignia Solutions Plc | Computer system |
US6668373B1 (en) * | 1998-11-23 | 2003-12-23 | Willard H. Wattenburg | System, apparatus and method for expanding the range of decimal numbers of any length in existing data bases and computer programs |
US7380245B1 (en) * | 1998-11-23 | 2008-05-27 | Samsung Electronics Co., Ltd. | Technique for detecting corruption associated with a stack in a storage device |
FR2786285B1 (fr) * | 1998-11-24 | 2001-02-02 | Secap | Dispositif et procede de protection contre le debordement de pile dans une memoire et machine a affranchir les mettant en oeuvre |
WO2000033192A1 (en) | 1998-11-25 | 2000-06-08 | Sun Microsystems, Inc. | A method for enabling comprehensive profiling of garbage-collected memory systems |
US6826749B2 (en) | 1998-12-08 | 2004-11-30 | Nazomi Communications, Inc. | Java hardware accelerator using thread manager |
US7225436B1 (en) | 1998-12-08 | 2007-05-29 | Nazomi Communications Inc. | Java hardware accelerator using microcode engine |
US20050149694A1 (en) * | 1998-12-08 | 2005-07-07 | Mukesh Patel | Java hardware accelerator using microcode engine |
US6332215B1 (en) | 1998-12-08 | 2001-12-18 | Nazomi Communications, Inc. | Java virtual machine hardware for RISC and CISC processors |
US20020073398A1 (en) * | 1998-12-14 | 2002-06-13 | Jeffrey L. Tinker | Method and system for modifying executable code to add additional functionality |
US7140005B2 (en) * | 1998-12-21 | 2006-11-21 | Intel Corporation | Method and apparatus to test an instruction sequence |
US6343297B1 (en) | 1998-12-30 | 2002-01-29 | International Business Machines Corporation | Methods, systems and computer program products for providing document management for software development systems |
US6336217B1 (en) * | 1998-12-30 | 2002-01-01 | International Business Machines Corporation | Systems, methods and computer program products for end-to-end software development process automation |
JP3355602B2 (ja) | 1999-01-27 | 2002-12-09 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 多次元配列オブジェクトの処理方法及び装置 |
US6446257B1 (en) * | 1999-02-04 | 2002-09-03 | Hewlett-Packard Company | Method and apparatus for pre-allocation of system resources to facilitate garbage collection |
US6430741B1 (en) * | 1999-02-26 | 2002-08-06 | Hewlett-Packard Company | System and method for data coverage analysis of a computer program |
US6367071B1 (en) * | 1999-03-02 | 2002-04-02 | Lucent Technologies Inc. | Compiler optimization techniques for exploiting a zero overhead loop mechanism |
US20020135611A1 (en) * | 1999-03-04 | 2002-09-26 | Trevor Deosaran | Remote performance management to accelerate distributed processes |
US6580431B1 (en) | 1999-03-04 | 2003-06-17 | Nexmem | System, method, and computer program product for intelligent memory to accelerate processes |
US6463583B1 (en) * | 1999-04-08 | 2002-10-08 | Novadigm, Inc. | Dynamic injection of execution logic into main dynamic link library function of the original kernel of a windowed operating system |
US6714995B2 (en) * | 1999-07-09 | 2004-03-30 | Bellsouth Intellectual Property Corporation | Method and apparatus for archiving, updating or retrieving an uninitialized entry in an advanced intelligent network |
US7770016B2 (en) * | 1999-07-29 | 2010-08-03 | Intertrust Technologies Corporation | Systems and methods for watermarking software and other media |
US6745385B1 (en) * | 1999-09-01 | 2004-06-01 | Microsoft Corporation | Fixing incompatible applications by providing stubs for APIs |
US7032213B1 (en) * | 1999-09-01 | 2006-04-18 | Microsoft Corporation | Fixing incompatible applications using a light debugger |
GB9920916D0 (en) * | 1999-09-03 | 1999-11-10 | Sgs Thomson Microelectronics | A relocation format for linking |
GB2358491A (en) * | 1999-09-03 | 2001-07-25 | Sgs Thomson Microelectronics | A relocation format for linking |
JP3838825B2 (ja) * | 1999-09-27 | 2006-10-25 | 富士通株式会社 | システム解析装置及び方法、並びに解析プログラムを格納した記憶媒体 |
US6766514B1 (en) * | 1999-10-19 | 2004-07-20 | General Electric Co. | Compiler having real-time tuning, I/O scaling and process test capability |
US6438664B1 (en) | 1999-10-27 | 2002-08-20 | Advanced Micro Devices, Inc. | Microcode patch device and method for patching microcode using match registers and patch routines |
US6631480B2 (en) | 1999-11-10 | 2003-10-07 | Symantec Corporation | Methods and systems for protecting data from potential corruption by a crashed computer program |
US6630946B2 (en) | 1999-11-10 | 2003-10-07 | Symantec Corporation | Methods for automatically locating data-containing windows in frozen applications program and saving contents |
US6662310B2 (en) | 1999-11-10 | 2003-12-09 | Symantec Corporation | Methods for automatically locating url-containing or other data-containing windows in frozen browser or other application program, saving contents, and relaunching application program with link to saved data |
US6718485B1 (en) | 1999-11-16 | 2004-04-06 | Parasoft Corporation | Software emulating hardware for analyzing memory references of a computer program |
US6477666B1 (en) * | 1999-11-22 | 2002-11-05 | International Business Machines Corporation | Automatic fault injection into a JAVA virtual machine (JVM) |
US7111307B1 (en) | 1999-11-23 | 2006-09-19 | Microsoft Corporation | Method and system for monitoring and verifying software drivers using system resources including memory allocation and access |
US6817011B1 (en) | 1999-12-14 | 2004-11-09 | International Business Machines Corporation | Memory allocation profiling to discover high frequency allocators |
US7058928B2 (en) | 1999-12-23 | 2006-06-06 | Identify Software Ltd. | System and method for conditional tracing of computer programs |
US7107526B1 (en) * | 2000-01-19 | 2006-09-12 | Xerox Corporation | Transparent injection of specific content into web pages viewed while browsing |
US6550058B1 (en) * | 2000-02-03 | 2003-04-15 | International Business Machines Corporation | Stack clearing device and method |
US6912571B1 (en) * | 2000-02-22 | 2005-06-28 | Frank David Serena | Method of replacing content |
US6578094B1 (en) * | 2000-03-02 | 2003-06-10 | International Business Machines Corporation | Method for preventing buffer overflow attacks |
US20020087949A1 (en) * | 2000-03-03 | 2002-07-04 | Valery Golender | System and method for software diagnostics using a combination of visual and dynamic tracing |
US6634020B1 (en) | 2000-03-24 | 2003-10-14 | International Business Machines Corporation | Uninitialized memory watch |
US6687851B1 (en) | 2000-04-13 | 2004-02-03 | Stratus Technologies Bermuda Ltd. | Method and system for upgrading fault-tolerant systems |
US6820213B1 (en) | 2000-04-13 | 2004-11-16 | Stratus Technologies Bermuda, Ltd. | Fault-tolerant computer system with voter delay buffer |
US6802022B1 (en) | 2000-04-14 | 2004-10-05 | Stratus Technologies Bermuda Ltd. | Maintenance of consistent, redundant mass storage images |
US6691225B1 (en) | 2000-04-14 | 2004-02-10 | Stratus Technologies Bermuda Ltd. | Method and apparatus for deterministically booting a computer system having redundant components |
US6901481B2 (en) | 2000-04-14 | 2005-05-31 | Stratus Technologies Bermuda Ltd. | Method and apparatus for storing transactional information in persistent memory |
US6862689B2 (en) | 2001-04-12 | 2005-03-01 | Stratus Technologies Bermuda Ltd. | Method and apparatus for managing session information |
US6823507B1 (en) | 2000-06-06 | 2004-11-23 | International Business Machines Corporation | Detection of memory-related errors in computer programs |
US6658653B1 (en) * | 2000-06-08 | 2003-12-02 | International Business Machines Corporation | Debugging methods for heap misuse |
US6918106B1 (en) * | 2000-07-31 | 2005-07-12 | Sun Microsystems, Inc. | Method and apparatus for collocating dynamically loaded program files |
EP1197847A3 (de) * | 2000-10-10 | 2003-05-21 | Nazomi Communications Inc. | Java-Hardwarebeschleuniger mit Mikrokodemaschine |
GB0029115D0 (en) * | 2000-11-29 | 2001-01-10 | Sgs Thomson Microelectronics | Assembling an object code module |
US20020129336A1 (en) * | 2000-12-19 | 2002-09-12 | Bolding Joe D. | Automatic symbol table selection in a multi-cell environment |
US6948010B2 (en) * | 2000-12-20 | 2005-09-20 | Stratus Technologies Bermuda Ltd. | Method and apparatus for efficiently moving portions of a memory block |
US7672947B2 (en) * | 2000-12-22 | 2010-03-02 | James H. Kerr, Sr. | Asset attachment device |
US8312435B2 (en) * | 2000-12-26 | 2012-11-13 | Identify Software Ltd. (IL) | System and method for conditional tracing of computer programs |
GB0031750D0 (en) * | 2000-12-28 | 2001-02-07 | Sgs Thomson Microelectronics | Retrieval of symbol attributes |
KR100525537B1 (ko) * | 2000-12-28 | 2005-11-02 | 엘지전자 주식회사 | 인터럽트를 이용한 응용 프로그램의 에러검출장치 및 방법. |
US20020099872A1 (en) * | 2001-01-19 | 2002-07-25 | Vinodha Ramasamy | Allocating registers for use in programming code modification |
US8458754B2 (en) * | 2001-01-22 | 2013-06-04 | Sony Computer Entertainment Inc. | Method and system for providing instant start multimedia content |
US6957421B2 (en) * | 2001-01-26 | 2005-10-18 | Hewlett-Packard Development Company, L.P. | Providing debugging capability for program instrumented code |
US6886171B2 (en) * | 2001-02-20 | 2005-04-26 | Stratus Technologies Bermuda Ltd. | Caching for I/O virtual address translation and validation using device drivers |
WO2002071183A2 (en) * | 2001-02-28 | 2002-09-12 | Wily Technology, Inc. | Detecting a stalled routine |
US6766413B2 (en) | 2001-03-01 | 2004-07-20 | Stratus Technologies Bermuda Ltd. | Systems and methods for caching with file-level granularity |
US6874102B2 (en) * | 2001-03-05 | 2005-03-29 | Stratus Technologies Bermuda Ltd. | Coordinated recalibration of high bandwidth memories in a multiprocessor computer |
US6415865B1 (en) | 2001-03-08 | 2002-07-09 | Halliburton Energy Serv Inc | Electron transfer agents in well acidizing compositions and methods |
US7065672B2 (en) * | 2001-03-28 | 2006-06-20 | Stratus Technologies Bermuda Ltd. | Apparatus and methods for fault-tolerant computing using a switching fabric |
US6928583B2 (en) * | 2001-04-11 | 2005-08-09 | Stratus Technologies Bermuda Ltd. | Apparatus and method for two computing elements in a fault-tolerant server to execute instructions in lockstep |
US6957206B2 (en) | 2001-04-19 | 2005-10-18 | Quantum Dynamics, Inc. | Computer system and method with adaptive N-level structures for automated generation of program solutions based on rules input by subject matter experts |
US6996750B2 (en) * | 2001-05-31 | 2006-02-07 | Stratus Technologies Bermuda Ltd. | Methods and apparatus for computer bus error termination |
US7581103B2 (en) | 2001-06-13 | 2009-08-25 | Intertrust Technologies Corporation | Software self-checking systems and methods |
US9554268B2 (en) | 2001-07-26 | 2017-01-24 | Kyocera Corporation | System and method for updating persistent data in a wireless communications device |
US7143407B2 (en) | 2001-07-26 | 2006-11-28 | Kyocera Wireless Corp. | System and method for executing wireless communications device dynamic instruction sets |
WO2003010658A2 (en) * | 2001-07-26 | 2003-02-06 | Kyocera Wireless Corporation | System and method for organizing field upgradable wireless communication device software |
US7159214B2 (en) | 2001-07-26 | 2007-01-02 | Kyocera Wireless Corp. | System and method for compacting field upgradeable wireless communication device software code sections |
US7328007B2 (en) | 2001-07-26 | 2008-02-05 | Kyocera Wireless Corp. | System and method for organizing wireless communication device system software |
US7184793B2 (en) | 2001-07-26 | 2007-02-27 | Kyocera Wireless Corp. | System and method for over the air area code update |
US7386846B2 (en) | 2001-07-26 | 2008-06-10 | Kyocera Wireless Corp. | System and method for the management of wireless communications device system software downloads in the field |
US7027806B2 (en) | 2001-07-26 | 2006-04-11 | Kyocera Wireless, Corp. | System and method for field downloading a wireless communications device software code section |
US7184759B2 (en) | 2001-07-26 | 2007-02-27 | Kyocera Wireless Corp. | Modular software components for wireless communication devices |
US6961537B2 (en) | 2001-08-10 | 2005-11-01 | Kyocera Wireless Corp. | System and method for peer-to-peer handset communication |
US7254386B2 (en) | 2001-08-10 | 2007-08-07 | Kyocera Wireless Corp. | System and method for improved security in handset reprovisioning and reprogramming |
US8769508B2 (en) | 2001-08-24 | 2014-07-01 | Nazomi Communications Inc. | Virtual machine hardware for RISC and CISC processors |
US6892378B2 (en) * | 2001-09-17 | 2005-05-10 | Hewlett-Packard Development Company, L.P. | Method to detect unbounded growth of linked lists in a running application |
US7191430B2 (en) * | 2001-09-24 | 2007-03-13 | Hewlett-Packard Development Company, L.P. | Providing instruction execution hints to a processor using break instructions |
KR100461535B1 (ko) * | 2001-11-02 | 2004-12-14 | 한국전자통신연구원 | 내장형 시스템을 위한 점진적 원격 로딩 장치 및 그 방법 |
US7107582B2 (en) * | 2001-11-15 | 2006-09-12 | International Business Machines Corporation | System and method for source-driven form-independent dynamic content resolution |
US7426719B2 (en) * | 2001-11-29 | 2008-09-16 | Microsoft Corporation | Method and system for rewriting unwind data in the presence of exceptions |
US6653260B2 (en) | 2001-12-07 | 2003-11-25 | Halliburton Energy Services, Inc. | Electron transfer system for well acidizing compositions and methods |
US20030140337A1 (en) * | 2001-12-21 | 2003-07-24 | Celoxica Ltd. | System, method, and article of manufacture for data transfer reporting for an application |
US20030126590A1 (en) * | 2001-12-28 | 2003-07-03 | Michael Burrows | System and method for dynamic data-type checking |
JP2003280754A (ja) * | 2002-03-25 | 2003-10-02 | Nec Corp | 隠蔽化ソースプログラム、ソースプログラム変換方法及び装置並びにソース変換プログラム |
US7644392B2 (en) * | 2002-04-12 | 2010-01-05 | Telelogic Technologies North America, Inc. | System and method for active configuration management |
US7284246B2 (en) | 2002-04-23 | 2007-10-16 | Canon Kabushiki Kaisha | Extensible device driver |
CA2383832A1 (en) * | 2002-04-24 | 2003-10-24 | Ibm Canada Limited-Ibm Canada Limitee | System and method for intelligent trap analysis |
US20030217355A1 (en) * | 2002-05-16 | 2003-11-20 | International Business Machines Corporation | System and method of implementing a virtual data modification breakpoint register |
JP3840149B2 (ja) * | 2002-06-28 | 2006-11-01 | 株式会社東芝 | コンパイラ、演算処理システム及び演算処理方法 |
GB0215029D0 (en) * | 2002-06-28 | 2002-08-07 | Critical Blue Ltd | Strand based execution |
US20040019877A1 (en) * | 2002-07-26 | 2004-01-29 | International Business Machines Corporation | System, method and program product for initializing variables in a program |
US20040045018A1 (en) * | 2002-08-27 | 2004-03-04 | Nair Sreekumar R. | Using address space bridge in postoptimizer to route indirect calls at runtime |
US7069279B1 (en) * | 2002-11-04 | 2006-06-27 | Savaje Technologies, Inc. | Timely finalization of system resources |
US7386839B1 (en) | 2002-11-06 | 2008-06-10 | Valery Golender | System and method for troubleshooting software configuration problems using application tracing |
US7484205B2 (en) * | 2002-12-12 | 2009-01-27 | Microsoft Corporation | Preprocessor-based source code instrumentation |
US7603704B2 (en) * | 2002-12-19 | 2009-10-13 | Massachusetts Institute Of Technology | Secure execution of a computer program using a code cache |
US7594111B2 (en) * | 2002-12-19 | 2009-09-22 | Massachusetts Institute Of Technology | Secure execution of a computer program |
US7293263B2 (en) * | 2002-12-20 | 2007-11-06 | Bea Systems, Inc. | System and method for memory leak detection in a virtual machine environment |
US7603661B2 (en) * | 2003-01-30 | 2009-10-13 | Hamilton Sunstrand | Parse table generation method and system |
US7096339B2 (en) * | 2003-03-01 | 2006-08-22 | International Business Machines Corporation | System and method for detecting memory management programming errors |
US8032866B1 (en) | 2003-03-27 | 2011-10-04 | Identify Software Ltd. | System and method for troubleshooting runtime software problems using application learning |
US20040194063A1 (en) * | 2003-03-28 | 2004-09-30 | Joel Pereira | System and method for automated testing of a software module |
US20040255274A1 (en) * | 2003-06-12 | 2004-12-16 | Win-Harn Liu | Test system with flexible extension and maintenance functions and the method thereof |
EP1652033A1 (de) * | 2003-07-08 | 2006-05-03 | Seventh Knight | Automatische regeneration von computer-datei-beschreibung |
US7496896B2 (en) * | 2003-07-17 | 2009-02-24 | Computer Associates Think, Inc. | Accessing return values and exceptions |
US7359698B2 (en) | 2003-09-08 | 2008-04-15 | Kyocera Wireless Corp. | Systems and methods for enhanced over-the-air programming |
US20050071611A1 (en) * | 2003-09-30 | 2005-03-31 | International Business Machines Corporation | Method and apparatus for counting data accesses and instruction executions that exceed a threshold |
US20050071608A1 (en) * | 2003-09-30 | 2005-03-31 | International Business Machines Corporation | Method and apparatus for selectively counting instructions and data accesses |
US20050071610A1 (en) * | 2003-09-30 | 2005-03-31 | International Business Machines Corporation | Method and apparatus for debug support for individual instructions and memory locations |
US20050071821A1 (en) * | 2003-09-30 | 2005-03-31 | International Business Machines Corporation | Method and apparatus to autonomically select instructions for selective counting |
US7395527B2 (en) * | 2003-09-30 | 2008-07-01 | International Business Machines Corporation | Method and apparatus for counting instruction execution and data accesses |
US20050071816A1 (en) * | 2003-09-30 | 2005-03-31 | International Business Machines Corporation | Method and apparatus to autonomically count instruction execution for applications |
US20050071612A1 (en) * | 2003-09-30 | 2005-03-31 | International Business Machines Corporation | Method and apparatus for generating interrupts upon execution of marked instructions and upon access to marked memory locations |
US7937691B2 (en) * | 2003-09-30 | 2011-05-03 | International Business Machines Corporation | Method and apparatus for counting execution of specific instructions and accesses to specific data locations |
US7373637B2 (en) * | 2003-09-30 | 2008-05-13 | International Business Machines Corporation | Method and apparatus for counting instruction and memory location ranges |
US20050071609A1 (en) * | 2003-09-30 | 2005-03-31 | International Business Machines Corporation | Method and apparatus to autonomically take an exception on specified instructions |
US8381037B2 (en) | 2003-10-09 | 2013-02-19 | International Business Machines Corporation | Method and system for autonomic execution path selection in an application |
US7225309B2 (en) * | 2003-10-09 | 2007-05-29 | International Business Machines Corporation | Method and system for autonomic performance improvements in an application via memory relocation |
US7421681B2 (en) * | 2003-10-09 | 2008-09-02 | International Business Machines Corporation | Method and system for autonomic monitoring of semaphore operation in an application |
US20050086455A1 (en) * | 2003-10-16 | 2005-04-21 | International Business Machines Corporation | Method and apparatus for generating interrupts for specific types of instructions |
GB2407403A (en) * | 2003-10-22 | 2005-04-27 | Ibm | Validating a variable data item in a software routine |
US7257657B2 (en) * | 2003-11-06 | 2007-08-14 | International Business Machines Corporation | Method and apparatus for counting instruction execution and data accesses for specific types of instructions |
US7458078B2 (en) * | 2003-11-06 | 2008-11-25 | International Business Machines Corporation | Apparatus and method for autonomic hardware assisted thread stack tracking |
US7493599B2 (en) * | 2003-11-26 | 2009-02-17 | Intel Corporation | Device, system and method for detection and handling of misaligned data access |
US7776529B2 (en) | 2003-12-05 | 2010-08-17 | Life Technologies Corporation | Methine-substituted cyanine dye compounds |
US7496908B2 (en) * | 2004-01-14 | 2009-02-24 | International Business Machines Corporation | Method and apparatus for optimizing code execution using annotated trace information having performance indicator and counter information |
US7895382B2 (en) * | 2004-01-14 | 2011-02-22 | International Business Machines Corporation | Method and apparatus for qualifying collection of performance monitoring events by types of interrupt when interrupt occurs |
US20050155018A1 (en) * | 2004-01-14 | 2005-07-14 | International Business Machines Corporation | Method and apparatus for generating interrupts based on arithmetic combinations of performance counter values |
US7114036B2 (en) * | 2004-01-14 | 2006-09-26 | International Business Machines Corporation | Method and apparatus for autonomically moving cache entries to dedicated storage when false cache line sharing is detected |
US7392370B2 (en) | 2004-01-14 | 2008-06-24 | International Business Machines Corporation | Method and apparatus for autonomically initiating measurement of secondary metrics based on hardware counter values for primary metrics |
US7197586B2 (en) * | 2004-01-14 | 2007-03-27 | International Business Machines Corporation | Method and system for recording events of an interrupt using pre-interrupt handler and post-interrupt handler |
US7415705B2 (en) * | 2004-01-14 | 2008-08-19 | International Business Machines Corporation | Autonomic method and apparatus for hardware assist for patching code |
US7293164B2 (en) * | 2004-01-14 | 2007-11-06 | International Business Machines Corporation | Autonomic method and apparatus for counting branch instructions to generate branch statistics meant to improve branch predictions |
US7526757B2 (en) * | 2004-01-14 | 2009-04-28 | International Business Machines Corporation | Method and apparatus for maintaining performance monitoring structures in a page table for use in monitoring performance of a computer program |
US7181599B2 (en) * | 2004-01-14 | 2007-02-20 | International Business Machines Corporation | Method and apparatus for autonomic detection of cache “chase tail” conditions and storage of instructions/data in “chase tail” data structure |
US7082486B2 (en) * | 2004-01-14 | 2006-07-25 | International Business Machines Corporation | Method and apparatus for counting interrupts by type |
US7290255B2 (en) * | 2004-01-14 | 2007-10-30 | International Business Machines Corporation | Autonomic method and apparatus for local program code reorganization using branch count per instruction hardware |
US7093081B2 (en) * | 2004-01-14 | 2006-08-15 | International Business Machines Corporation | Method and apparatus for identifying false cache line sharing |
US20050172275A1 (en) * | 2004-01-29 | 2005-08-04 | Thilo Opatemy | Execution of instructions in an automation system |
US7739689B1 (en) * | 2004-02-27 | 2010-06-15 | Symantec Operating Corporation | Internal monitoring of applications in a distributed management framework |
US20050198624A1 (en) * | 2004-03-02 | 2005-09-08 | Chipman Timothy W. | Method and system for program transformation |
US7987453B2 (en) * | 2004-03-18 | 2011-07-26 | International Business Machines Corporation | Method and apparatus for determining computer program flows autonomically using hardware assisted thread stack tracking and cataloged symbolic data |
US7299319B2 (en) | 2004-03-22 | 2007-11-20 | International Business Machines Corporation | Method and apparatus for providing hardware assistance for code coverage |
US8069192B2 (en) * | 2004-03-22 | 2011-11-29 | Microsoft Corporation | Computing device with relatively limited storage space and operating / file system thereof |
US7647358B2 (en) * | 2004-03-22 | 2010-01-12 | Microsoft Corporation | Computing device with relatively limited storage space and operating/file system thereof |
US8135915B2 (en) | 2004-03-22 | 2012-03-13 | International Business Machines Corporation | Method and apparatus for hardware assistance for prefetching a pointer to a data structure identified by a prefetch indicator |
US7526616B2 (en) | 2004-03-22 | 2009-04-28 | International Business Machines Corporation | Method and apparatus for prefetching data from a data structure |
US7421684B2 (en) * | 2004-03-22 | 2008-09-02 | International Business Machines Corporation | Method and apparatus for autonomic test case feedback using hardware assistance for data coverage |
US7296130B2 (en) | 2004-03-22 | 2007-11-13 | International Business Machines Corporation | Method and apparatus for providing hardware assistance for data access coverage on dynamically allocated data |
US7480899B2 (en) * | 2004-03-22 | 2009-01-20 | International Business Machines Corporation | Method and apparatus for autonomic test case feedback using hardware assistance for code coverage |
US7549150B2 (en) * | 2004-03-24 | 2009-06-16 | Microsoft Corporation | Method and system for detecting potential races in multithreaded programs |
US7496898B1 (en) * | 2004-04-15 | 2009-02-24 | Sun Microsystems, Inc. | Error analysis and diagnosis for generic function calls |
US7930491B1 (en) | 2004-04-19 | 2011-04-19 | Cisco Technology, Inc. | Memory corruption detection system and method using contingency analysis regulation |
US7827539B1 (en) | 2004-06-25 | 2010-11-02 | Identify Software Ltd. | System and method for automated tuning of program execution tracing |
US7457832B2 (en) * | 2004-08-31 | 2008-11-25 | Microsoft Corporation | Verifying dynamically generated operations on a data store |
US7685574B2 (en) * | 2004-09-29 | 2010-03-23 | Microsoft Corporation | Constrained execution regions |
US7457671B2 (en) * | 2004-09-30 | 2008-11-25 | Rockwell Automation Technologies, Inc. | Systems and methods that facilitate management of add-on instruction generation, selection, and/or monitoring during execution |
US8655853B2 (en) * | 2004-10-01 | 2014-02-18 | Sap Ag | System and method for optimizing database transaction termination |
US7624304B2 (en) * | 2004-10-07 | 2009-11-24 | Microsoft Corporation | Defect detection for integers |
US7533373B2 (en) * | 2005-01-25 | 2009-05-12 | Taiwan Semiconductor Manufacturing Co., Ltd | Method for prevention of system execution malfunction |
US8010956B1 (en) * | 2005-01-28 | 2011-08-30 | Oracle America, Inc. | Control transfer table structuring |
US7343523B2 (en) * | 2005-02-14 | 2008-03-11 | Aristoga, Inc. | Web-based analysis of defective computer programs |
US9152531B2 (en) * | 2005-02-18 | 2015-10-06 | Green Hills Sofware, Inc. | Post-compile instrumentation of object code for generating execution trace data |
US8266608B2 (en) * | 2005-02-18 | 2012-09-11 | Green Hills Software, Inc. | Post-compile instrumentation of object code for generating execution trace data |
US7376815B2 (en) * | 2005-02-25 | 2008-05-20 | Qualcomm Incorporated | Methods and apparatus to insure correct predecode |
WO2006104407A1 (en) * | 2005-03-28 | 2006-10-05 | Intel Corporation | A platform independent binary instrumentation method |
US20060222126A1 (en) * | 2005-03-31 | 2006-10-05 | Stratus Technologies Bermuda Ltd. | Systems and methods for maintaining synchronicity during signal transmission |
US20060222125A1 (en) * | 2005-03-31 | 2006-10-05 | Edwards John W Jr | Systems and methods for maintaining synchronicity during signal transmission |
US7735136B2 (en) * | 2005-04-18 | 2010-06-08 | Vmware, Inc. | 0-touch and 1-touch techniques for improving the availability of computer programs under protection without compromising security |
US20060248103A1 (en) * | 2005-04-29 | 2006-11-02 | Cisco Technology, Inc. | Method of detecting memory leaks in software applications |
EP1885718B1 (de) | 2005-05-11 | 2017-03-15 | Life Technologies Corporation | Chemische fluoreszente verbindungen mit hoher selektivität für doppelstrang-dna sowie verfahren zu ihrer verwendung |
US20070011499A1 (en) * | 2005-06-07 | 2007-01-11 | Stratus Technologies Bermuda Ltd. | Methods for ensuring safe component removal |
US20060277541A1 (en) * | 2005-06-07 | 2006-12-07 | Sony Computer Entertainment America Inc. | Relocatable component file format |
CN101278260B (zh) * | 2005-06-07 | 2012-07-18 | 威睿公司 | 使软件程序免于弱点和攻击的约束注入方法 |
US7840774B2 (en) * | 2005-09-09 | 2010-11-23 | International Business Machines Corporation | Compressibility checking avoidance |
US7730453B2 (en) * | 2005-12-13 | 2010-06-01 | Microsoft Corporation | Runtime detection for invalid use of zero-length memory allocations |
US20070169062A1 (en) * | 2005-12-20 | 2007-07-19 | Intel Corporation | Suspending memory analyzing of a program performed by a runtime memory analysis system |
US9183114B2 (en) * | 2005-12-27 | 2015-11-10 | International Business Machines Corporation | Error detection on the stack |
US7774761B2 (en) * | 2005-12-27 | 2010-08-10 | International Business Machines Corporation | Use of memory watch points and a debugger to improve analysis of runtime memory access errors |
US7774741B2 (en) * | 2006-05-22 | 2010-08-10 | Microsoft Corporation | Automatically resource leak diagnosis and detecting process within the operating system |
JP4894362B2 (ja) * | 2006-06-09 | 2012-03-14 | 富士通株式会社 | 稼働状況監視プログラム |
US20080034349A1 (en) * | 2006-08-04 | 2008-02-07 | Microsoft Corporation | Incremental program modification based on usage data |
US20080098191A1 (en) * | 2006-10-20 | 2008-04-24 | International Business Machines Corporation | Determining code efficiency by monitoring memory reallocation |
US20080120604A1 (en) * | 2006-11-20 | 2008-05-22 | Morris Robert P | Methods, Systems, And Computer Program Products For Providing Program Runtime Data Validation |
US9495278B2 (en) * | 2006-12-27 | 2016-11-15 | International Business Machines Corporation | Dynamic discovery of data segments within instrumented code |
US7861231B2 (en) * | 2007-03-09 | 2010-12-28 | International Business Machines Corporation | System and method of identification of dangling pointers |
US7730090B2 (en) * | 2007-03-09 | 2010-06-01 | Emc Corporation | Architecture for performing file system checking on an active file system |
US20080294853A1 (en) * | 2007-05-25 | 2008-11-27 | Gururaja Kowlali | Method and System for Pinpointing Memory Leaks |
US8930909B1 (en) * | 2007-07-13 | 2015-01-06 | The Mathworks, Inc. | Debugging using presentation layer representations of objects |
GB2451253A (en) * | 2007-07-24 | 2009-01-28 | Ezurio Ltd | Indicating the position of a next declaration statement in object code when declaring a variable object code |
US9483405B2 (en) * | 2007-09-20 | 2016-11-01 | Sony Interactive Entertainment Inc. | Simplified run-time program translation for emulating complex processor pipelines |
US8185880B2 (en) * | 2007-10-04 | 2012-05-22 | International Business Machines Corporation | Optimizing heap memory usage |
US8468500B2 (en) * | 2007-12-12 | 2013-06-18 | Nec Corporation | Program debugging method and program transformation method, program debugging device and program transformation device using the same, and storage medium |
US20090172368A1 (en) * | 2007-12-26 | 2009-07-02 | International Business Machines Corporation | Hardware Based Runtime Error Detection |
US8141055B2 (en) * | 2007-12-31 | 2012-03-20 | International Business Machines Corporation | Method for dynamic discovery of code segments in instrumented binary modules |
US8601443B2 (en) * | 2008-02-12 | 2013-12-03 | International Business Machines Corporation | Method and system for correlating trace data |
US20090228875A1 (en) * | 2008-03-04 | 2009-09-10 | Devries Alex | Method and System for Reducing Disk Allocation by Profiling Symbol Usage |
US8930683B1 (en) | 2008-06-03 | 2015-01-06 | Symantec Operating Corporation | Memory order tester for multi-threaded programs |
US9317399B2 (en) | 2012-09-28 | 2016-04-19 | Synopsys, Inc. | Policy evaluation based upon dynamic observation, static analysis and code change history |
US10713069B2 (en) | 2008-09-04 | 2020-07-14 | Synopsys, Inc. | Software and hardware emulation system |
CN101727355B (zh) * | 2008-10-31 | 2013-02-20 | 国际商业机器公司 | 用于内存访问事件的处理方法和系统 |
US8001432B2 (en) * | 2008-11-20 | 2011-08-16 | Lsi Corporation | Uninitialized memory detection using error correction codes and built-in self test |
CN101706725B (zh) * | 2009-11-20 | 2014-03-19 | 中兴通讯股份有限公司 | 一种可重定位程序的加载及调试方法及系统 |
US9298427B2 (en) * | 2010-01-06 | 2016-03-29 | Microsoft Technology Licensing, Llc. | Creating inferred symbols from code usage |
JP2011141676A (ja) * | 2010-01-06 | 2011-07-21 | Toshiba Corp | 言語処理装置、言語処理方法およびコンピュータプログラムプロダクト |
US8572574B2 (en) * | 2010-07-16 | 2013-10-29 | Fujitsu Limited | Solving hybrid constraints to validate specification requirements of a software module |
US8413249B1 (en) | 2010-09-30 | 2013-04-02 | Coverity, Inc. | Threat assessment of software-configured system based upon architecture model and as-built code |
US8799615B2 (en) | 2010-10-21 | 2014-08-05 | International Business Machines Corporation | Organization of a small object area and a large object area in a java heap |
US8713024B2 (en) | 2010-11-22 | 2014-04-29 | Microsoft Corporation | Efficient forward ranking in a search engine |
US8478704B2 (en) | 2010-11-22 | 2013-07-02 | Microsoft Corporation | Decomposable ranking for efficient precomputing that selects preliminary ranking features comprising static ranking features and dynamic atom-isolated components |
US9342582B2 (en) | 2010-11-22 | 2016-05-17 | Microsoft Technology Licensing, Llc | Selection of atoms for search engine retrieval |
US9529908B2 (en) | 2010-11-22 | 2016-12-27 | Microsoft Technology Licensing, Llc | Tiering of posting lists in search engine index |
US9195745B2 (en) | 2010-11-22 | 2015-11-24 | Microsoft Technology Licensing, Llc | Dynamic query master agent for query execution |
US9424351B2 (en) | 2010-11-22 | 2016-08-23 | Microsoft Technology Licensing, Llc | Hybrid-distribution model for search engine indexes |
US8620907B2 (en) | 2010-11-22 | 2013-12-31 | Microsoft Corporation | Matching funnel for large document index |
US8762952B2 (en) | 2010-12-14 | 2014-06-24 | Bmc Software, Inc. | Recording method calls that led to an unforeseen problem |
US8745598B2 (en) | 2010-12-14 | 2014-06-03 | Bmc Software, Inc. | Running injected code prior to execution of an application |
US20120166982A1 (en) * | 2010-12-27 | 2012-06-28 | Udo Klein | Code list cache for value help |
EP2482191B1 (de) * | 2011-01-31 | 2017-03-22 | Fujitsu Limited | Speicherkorrektheitsprüfung in verteilten Computersystemen |
US9116717B2 (en) * | 2011-05-27 | 2015-08-25 | Cylance Inc. | Run-time interception of software methods |
US8898794B1 (en) | 2011-09-06 | 2014-11-25 | Andrei Teodor Borac | Efficient and secure data structure synchronization |
US8843790B2 (en) * | 2012-07-27 | 2014-09-23 | International Business Machines Corporation | Dynamic hardware watchpoint |
US9032376B2 (en) | 2012-09-28 | 2015-05-12 | Synopsys, Inc. | Static analysis of computer code to determine impact of change to a code component upon a dependent code component |
US9612943B2 (en) | 2013-06-28 | 2017-04-04 | Synopsys, Inc. | Prioritization of tests of computer program code |
CN104881611B (zh) * | 2014-02-28 | 2017-11-24 | 国际商业机器公司 | 保护软件产品中的敏感数据的方法和装置 |
US9465768B2 (en) | 2014-03-14 | 2016-10-11 | International Business Machines Corporation | PCI function measurement block enhancements |
WO2016118216A2 (en) | 2014-11-06 | 2016-07-28 | Intertrust Technologies Corporation | Secure application distribution systems and methods |
US9836381B2 (en) | 2015-05-13 | 2017-12-05 | Stensal Inc. | Translating machine codes to store metadata and to propagate metadata for run time checking of programming errors |
US10019244B1 (en) * | 2016-09-28 | 2018-07-10 | Amazon Technologies, Inc. | Interpreting program code using a symbol table |
US10108407B2 (en) * | 2016-10-24 | 2018-10-23 | International Business Machines Corporation | Loading optimized local entry points for local-use-only function pointers |
CN110023909B (zh) * | 2016-11-29 | 2023-05-05 | 三菱电机株式会社 | 控制装置以及程序更新方法 |
US10725894B2 (en) * | 2017-10-04 | 2020-07-28 | International Business Machines Corporation | Measuring and improving test coverage |
US11138016B2 (en) * | 2018-03-14 | 2021-10-05 | Mitsubishi Electric Corporation | System construction support device, system construction support method, and non-transitory storage medium |
CN109615423B (zh) * | 2018-11-29 | 2020-06-16 | 阿里巴巴集团控股有限公司 | 业务的处理方法及装置 |
US11681806B2 (en) | 2019-10-15 | 2023-06-20 | International Business Machines Corporation | Protecting against out-of-bounds buffer references |
US12093414B1 (en) * | 2019-12-09 | 2024-09-17 | Amazon Technologies, Inc. | Efficient detection of in-memory data accesses and context information |
US11693760B2 (en) * | 2020-12-21 | 2023-07-04 | RunSafe Security, Inc. | System and methods for live debugging of transformed binaries |
Family Cites Families (45)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4533997A (en) * | 1972-08-25 | 1985-08-06 | Westinghouse Electric Corp. | Computer monitored or controlled system which may be modified and de-bugged on-line by one not skilled in computer programming |
US3815103A (en) * | 1973-01-02 | 1974-06-04 | Honeywell Inf Systems | Memory presence checking apparatus |
US4104718A (en) * | 1974-12-16 | 1978-08-01 | Compagnie Honeywell Bull (Societe Anonyme) | System for protecting shared files in a multiprogrammed computer |
US4394731A (en) * | 1980-11-10 | 1983-07-19 | International Business Machines Corporation | Cache storage line shareability control for a multiprocessor system |
US4589068A (en) | 1983-10-03 | 1986-05-13 | Digital Equipment Corporation | Segmented debugger |
SE441872B (sv) * | 1984-04-06 | 1985-11-11 | Ericsson Telefon Ab L M | Anordning for overvakning av ett databehandlingssystem |
US4833604A (en) * | 1986-01-13 | 1989-05-23 | International Business Machines Corporation | Method for the relocation of linked control blocks |
NL8600217A (nl) * | 1986-01-30 | 1987-08-17 | Philips Nv | Dataverwerkende inrichting bevattende een geheugeninrichting voorzien van een coincidentieschakeling die in een foutherkennings- en een coincidentiemode schakelbaar is. |
US5115499A (en) * | 1986-05-14 | 1992-05-19 | Sequoia Systems, Inc. | Shared computer resource allocation system having apparatus for informing a requesting computer of the identity and busy/idle status of shared resources by command code |
US4802165A (en) * | 1986-10-08 | 1989-01-31 | Enteleki, Inc. | Method and apparatus of debugging computer programs |
GB2200483B (en) * | 1987-01-22 | 1991-10-16 | Nat Semiconductor Corp | Memory referencing in a high performance microprocessor |
US4964065A (en) | 1987-03-12 | 1990-10-16 | Decibel Products, Inc. | Computer-controlled electronic system monitor |
JP2681929B2 (ja) * | 1987-06-22 | 1997-11-26 | 三菱電機株式会社 | プログラム起動方式 |
US4903194A (en) * | 1987-11-12 | 1990-02-20 | International Business Machines Corporation | Storage addressing error detection circuitry |
US4953084A (en) * | 1987-11-16 | 1990-08-28 | Hewlett-Packard Company | Method and apparatus using variable ranges to support symbolic debugging of optimized code |
US4937736A (en) * | 1987-11-30 | 1990-06-26 | International Business Machines Corporation | Memory controller for protected memory with automatic access granting capability |
US5025366A (en) * | 1988-01-20 | 1991-06-18 | Advanced Micro Devices, Inc. | Organization of an integrated cache unit for flexible usage in cache system design |
US5175837A (en) * | 1989-02-03 | 1992-12-29 | Digital Equipment Corporation | Synchronizing and processing of memory access operations in multiprocessor systems using a directory of lock bits |
US5175828A (en) * | 1989-02-13 | 1992-12-29 | Hewlett-Packard Company | Method and apparatus for dynamically linking subprogram to main program using tabled procedure name comparison |
US5119377A (en) * | 1989-06-16 | 1992-06-02 | International Business Machines Corporation | System and method for software error early detection and data capture |
US5230070A (en) * | 1989-09-08 | 1993-07-20 | International Business Machines Corporation | Access authorization table for multi-processor caches |
US5701427A (en) | 1989-09-19 | 1997-12-23 | Digital Equipment Corp. | Information transfer arrangement for distributed computer system |
US5132972A (en) * | 1989-11-29 | 1992-07-21 | Honeywell Bull Inc. | Assembly language programming potential error detection scheme sensing apparent inconsistency with a previous operation |
US5075842A (en) * | 1989-12-22 | 1991-12-24 | Intel Corporation | Disabling tag bit recognition and allowing privileged operations to occur in an object-oriented memory protection mechanism |
US5404499A (en) * | 1990-01-24 | 1995-04-04 | Logical Services Incorporated | Semi-automatic program execution error detection |
US5175856A (en) | 1990-06-11 | 1992-12-29 | Supercomputer Systems Limited Partnership | Computer with integrated hierarchical representation (ihr) of program wherein ihr file is available for debugging and optimizing during target execution |
US5237691A (en) | 1990-08-01 | 1993-08-17 | At&T Bell Laboratories | Method and apparatus for automatically generating parallel programs from user-specified block diagrams |
US5313616A (en) * | 1990-09-18 | 1994-05-17 | 88Open Consortium, Ltd. | Method for analyzing calls of application program by inserting monitoring routines into the executable version and redirecting calls to the monitoring routines |
US5287453A (en) | 1990-09-18 | 1994-02-15 | Bull Hn Information Systems, Inc. | Fast remote file access facility for distributing file access requests in a closely coupled computer system |
EP0496494A3 (en) * | 1991-01-22 | 1993-05-12 | International Business Machines Corporation | Software maintenance system |
CA2035697A1 (en) | 1991-02-05 | 1992-08-06 | Brian James Smyth | Encryption apparatus for computer device |
JP3270102B2 (ja) | 1991-03-11 | 2002-04-02 | ヒューレット・パッカード・カンパニー | ライセンス付与方法及びシステム |
US5193180A (en) * | 1991-06-21 | 1993-03-09 | Pure Software Inc. | System for modifying relocatable object code files to monitor accesses to dynamically allocated memory |
US5632022A (en) | 1991-11-13 | 1997-05-20 | The United States Of America As Represented By The Administrator Of The National Aeronautics And Space Administration | Encyclopedia of software components |
US5257381A (en) * | 1992-02-28 | 1993-10-26 | Intel Corporation | Method of intercepting a global function of a network operating system and calling a monitoring function |
US5412788A (en) * | 1992-04-16 | 1995-05-02 | Digital Equipment Corporation | Memory bank management and arbitration in multiprocessor computer system |
US5557780A (en) | 1992-04-30 | 1996-09-17 | Micron Technology, Inc. | Electronic data interchange system for managing non-standard data |
US5388268A (en) | 1992-09-18 | 1995-02-07 | Hewlett-Packard Company | Methods of indicating states of software processes cooperating on a single task |
US5647056A (en) | 1992-11-18 | 1997-07-08 | Canon Information Systems, Inc. | Method and apparatus for managing access to a networked peripheral |
DE69409445D1 (de) | 1993-07-27 | 1998-05-14 | Ibm | Prozessüberwachung in einem Mehrfachverarbeitungsanbieter |
FR2711026B1 (fr) | 1993-10-04 | 1995-12-08 | France Telecom | Système de gestion de la consommation de consultations de données sur un réseau de télécommunications. |
US5602729A (en) | 1994-03-15 | 1997-02-11 | Mercury Computer Systems, Inc. | Method and apparatus for monitoring and controlling multiprocessor digital data processing systems |
US5528753A (en) * | 1994-06-30 | 1996-06-18 | International Business Machines Corporation | System and method for enabling stripped object software monitoring in a computer system |
CA2226560C (en) | 1994-07-22 | 2002-07-02 | Erik P. Debenedictis | Method and apparatus for controlling connected computers without programming |
US5541911A (en) | 1994-10-12 | 1996-07-30 | 3Com Corporation | Remote smart filtering communication management system |
-
1991
- 1991-06-21 US US07/718,573 patent/US5193180A/en not_active Expired - Lifetime
-
1992
- 1992-06-05 DE DE69232761T patent/DE69232761T2/de not_active Expired - Lifetime
- 1992-06-05 EP EP92913752A patent/EP0591360B1/de not_active Expired - Lifetime
- 1992-06-05 AU AU21887/92A patent/AU2188792A/en not_active Abandoned
- 1992-06-05 CA CA002111958A patent/CA2111958C/en not_active Expired - Fee Related
- 1992-06-05 WO PCT/US1992/004672 patent/WO1993000633A1/en active IP Right Grant
- 1992-11-02 US US07/970,315 patent/US5335344A/en not_active Expired - Lifetime
-
1995
- 1995-05-26 US US08/452,452 patent/US5535329A/en not_active Expired - Lifetime
- 1995-05-31 US US08/455,821 patent/US6206584B1/en not_active Expired - Lifetime
-
1996
- 1996-05-31 US US08/658,910 patent/US5835701A/en not_active Expired - Lifetime
-
1999
- 1999-11-04 US US09/434,203 patent/US6618824B1/en not_active Expired - Lifetime
-
2003
- 2003-07-03 US US10/613,516 patent/US7210118B2/en not_active Expired - Lifetime
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8438558B1 (en) | 2009-03-27 | 2013-05-07 | Google Inc. | System and method of updating programs and data |
Also Published As
Publication number | Publication date |
---|---|
EP0591360A4 (en) | 1996-04-17 |
EP0591360B1 (de) | 2002-09-04 |
CA2111958A1 (en) | 1993-01-07 |
US5535329A (en) | 1996-07-09 |
US6206584B1 (en) | 2001-03-27 |
DE69232761D1 (de) | 2002-10-10 |
EP0591360A1 (de) | 1994-04-13 |
AU2188792A (en) | 1993-01-25 |
US5835701A (en) | 1998-11-10 |
US5335344A (en) | 1994-08-02 |
US6618824B1 (en) | 2003-09-09 |
CA2111958C (en) | 2003-08-05 |
WO1993000633A1 (en) | 1993-01-07 |
US20040107217A1 (en) | 2004-06-03 |
US5193180A (en) | 1993-03-09 |
US7210118B2 (en) | 2007-04-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE69232761T2 (de) | Verfahren und vorrichtung zur aenderung von dynamische zuweisbaren objektcodedateien | |
DE69510572T2 (de) | Verfahren und Vorrichtung zur Run-Time-Fehlerprüfung unter Verwendung dynamischer Programmmodifikation | |
DE69523029T2 (de) | Bytecodeprograminterpreter, Verfahren und Anordnung mit Vorprüfung von Datentyprestriktionen | |
DE69707752T2 (de) | Verfahren und System zur Klassenspeicherung in einem Festspeicher | |
DE60130840T2 (de) | Vorrichtung und Verfahren zur Katalogisierung von symbolischen Daten zur Verwendung bei der Leistungsanalyse von Computerprogrammen | |
DE69404439T2 (de) | Programmodellierungssystem. | |
DE69221041T2 (de) | Verbesserte fehleranzeige bei der ausführung von übersetztem befehlscode | |
DE69800909T2 (de) | Verfahren und Vorrichtung zur Optimierung der präzisen Speicherbereinigung, bei der Programmschleifen mit Zeiger-Feldern verwendet werden | |
DE69800686T2 (de) | Verfahren und Gerät für effizienten Operationen auf primären Typwerten ohne statisches Überladen | |
DE69811474T2 (de) | Rechnerarchitektur zur aufschiebung von exceptions statischer spekulativer befehle | |
DE69932371T2 (de) | Verschiebbare Instrumentationskennzeichen für die Prüfung und die Fehlerbeseitigung eines Computerprogramms | |
DE69909945T2 (de) | Verfahren und Anordnung zur Korrelation von Profildaten dynamisch erzeugt durch ein optimiertes ausführbares Programm mit Quellcodeanweisungen | |
DE69230578T2 (de) | Sprachenneutrale Objekte | |
DE3854546T2 (de) | Verfahren und Gerät zur Programmablaufmessung. | |
DE69503065T2 (de) | Objektorientierte vorrichtung für konfigurationsverlaufsverwaltung | |
DE60010420T2 (de) | Automatisches Regressionstesten von Arbeitsplatz-Software | |
DE69801186T2 (de) | Verfahren und Vorrichtung zum Auffinden von Objekt-Zeigern, für die Erkennung/Sammlung von nicht-referenzierten Daten-Objekten | |
DE69738101T2 (de) | Verwaltung des Zugangs zu Objekten mit Hilfe von Referenzen mit drei Zuständen | |
DE69720821T2 (de) | Fehlersuchsystem für Programme mit einer graphischen Benutzerschnittstelle | |
DE68921776T2 (de) | Prozessorssimulation. | |
EP0502857B1 (de) | Verfahren zur dynamischen bindung von definierbaren programmelementen eines interaktiven datenverarbeitungssystems | |
DE69801332T2 (de) | Speicherzuordnung | |
DE69524170T2 (de) | Eingebettete Programmablaufinformation zwecks Zielcodemanipulation | |
DE69328664T2 (de) | Verfahren und Anordnung zur Zusammenbindung von Objekten | |
DE102018127317B3 (de) | Verfahren und vorrichtungen zur computerimplementierten erzeugung eines ausführbaren programmcodes und zur ausführung eines ausführbaren programmcodes |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition | ||
8327 | Change in the person/name/address of the patent owner |
Owner name: INTERNATIONAL BUSINESS MACHINES CORP., ARMONK,, US |
|
8328 | Change in the person/name/address of the agent |
Representative=s name: DERZEIT KEIN VERTRETER BESTELLT |
|
8320 | Willingness to grant licences declared (paragraph 23) |