DE112016006060T5 - Technologien zum Aufruf von nativem Code unter Verwendung binärer Analyse - Google Patents

Technologien zum Aufruf von nativem Code unter Verwendung binärer Analyse Download PDF

Info

Publication number
DE112016006060T5
DE112016006060T5 DE112016006060.2T DE112016006060T DE112016006060T5 DE 112016006060 T5 DE112016006060 T5 DE 112016006060T5 DE 112016006060 T DE112016006060 T DE 112016006060T DE 112016006060 T5 DE112016006060 T5 DE 112016006060T5
Authority
DE
Germany
Prior art keywords
native code
code segment
complexity
computing device
native
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.)
Withdrawn
Application number
DE112016006060.2T
Other languages
English (en)
Inventor
Abhay S. Kanhere
Haitao Feng
Paul H. Hohensee
Aravind Subramanian
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE112016006060T5 publication Critical patent/DE112016006060T5/de
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/53Decompilation; Disassembly
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms

Landscapes

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

Abstract

Es werden Technologien zum Aufruf von nativem Code unter Verwendung binärer Analyse beschrieben. Eine Rechenvorrichtung zum Aufrufen nativen Codes aus verwaltetem Code unter Verwendung binärer Analyse empfängt einen Aufruf von einem ein Verwalteter-Code-Segment ausführenden Thread zum Ausführen eines Nativer-Code-Segments. Die Rechenvorrichtung führt eine binäre Analyse des Nativer-Code-Segments durch und erzeugt aus der binären Analyse einen Komplexitätsanzeiger, der einen Komplexitätsgrad des Nativer-Code-Segments anzeigt, durch Vergleichen des Nativer-Code-Segments mit mindestens einer vordefinierten Komplexitätsregel. Zusätzlich speichert die Rechenvorrichtung einen Status des Threads auf Grundlage des Komplexitätsanzeigers und führt das Nativer-Code-Segment aus. Andere Ausführungsformen werden beschrieben und beansprucht.

Description

  • QUERVERWEIS AUF VERWANDTE ANMELDUNG
  • Die vorliegende Anmeldung beansprucht die Priorität für US-Gebrauchsmusteranmeldung der Seriennummer 14/998,274 mit dem Titel „TECHNOLOGIES FOR NATIVE CODE INVOCATION USING BINARY ANALYSIS“, die am 26. Dezember 2015 eingereicht wurde.
  • HINTERGRUND
  • Verwaltete Laufzeiten stellen Verfahren bereit, die ermöglichen, dass verwalteter Code mit nicht verwaltetem Maschinencode (z. B. nativem Code) interagiert. Typische verwaltete Laufzeiten unterhalten einen Zustand für jeden Thread wie zum Beispiel einen „laufenden“ Zustand („running“ state) und einen „nativen“ Zustand („native“ state). In dem „laufenden“ Zustand manipuliert ein Thread verwaltete Daten in dem Heap aktiv und prüft der Thread regelmäßig auf Anhalteanfragen, die ermöglichen, dass ein Speicherbereiniger („Garbage Collector“) ungenutzten Speicher zurückfordert. In dem „nativen“ Zustand hingegen prüft ein Thread nicht auf eine Anhalteanfrage.
  • In typischen verwalteten Laufzeiten wird der Zustand eines Threads geändert, wenn der Thread von der Ausführung verwalteten Codes zur Ausführung nativen Codes übergeht. Gleichermaßen wird der Zustand des Threads geändert, wenn der Thread von der Ausführung nativen Codes zur Ausführung verwalteten Codes übergeht. Die Zustandsänderung des Threads wird unter Setzen einer Sperre („Lock“) ausgeführt und ist relativ zeitintensiv. Für Code-Segmente, die eine Benutzerschnittstelle betreffen, werden Schlüsselverfahren häufig in nativem Code implementiert und aus verwaltetem Code aufgerufen. Dementsprechend kann der zu dem Übergang von verwaltetem Code zu nativem Code zugehörige Locking-Overhead eine Verzögerung bezüglich der Reaktionsfähigkeit der Benutzerschnittstelle bewirken.
  • Figurenliste
  • Die hier beschriebenen Konzepte sind beispielhaft und nicht einschränkend in den beigefügten Zeichnungen veranschaulicht. Aus Gründern einfacher und klarer Darstellung sind in den Zeichnungen dargestellte Elemente nicht zwangsläufig maßstäblich gezeichnet. Wo es als angemessen erachtet wurde, wurden Bezugskennzeichnungen in den Zeichnungen wiederholt, um entsprechende oder analoge Elemente anzugeben.
    • 1 ist ein vereinfachtes Blockdiagramm mindestens einer Ausführungsform einer Rechenvorrichtung für die Verwendung binärer Analyse beim Aufrufen eines Nativer-Code-Segments aus einem Verwalteter-Code-Segment;
    • 2 ist ein vereinfachtes Blockdiagramm mindestens einer Ausführungsform einer Umgebung, die durch die Rechenvorrichtung aus 1 erstellt werden kann;
    • 3 ist ein vereinfachtes Ablaufdiagramm mindestens einer Ausführungsform eines Verfahrens für die Verwendung binärer Analyse beim Aufrufen eines Nativer-Code-Segments aus einem Verwalteter-Code-Segment, das von der Rechenvorrichtung aus 1 und 2 ausgeführt werden kann;
    • 4 ist ein vereinfachtes Ablaufdiagramm eines Verfahrens für binäre Analyse, das von der Rechenvorrichtung aus 1 und 2 ausgeführt werden kann;
    • 5 ist ein vereinfachtes Ablaufdiagramm eines Verfahrens zur Erzeugung eines Komplexitätsanzeigers, das von der Rechenvorrichtung aus 1 und 2 ausgeführt werden kann;
    • 6 ist ein vereinfachtes Blockdiagramm von Komponenten eines Nativer-Code-Segments, das von der Rechenvorrichtung aus 1 und 2 ausgeführt werden kann;
    • 7 ist ein vereinfachtes Blockdiagramm von Komplexitätsregeln, die von der Rechenvorrichtung aus 1 und 2 zum Erzeugen eines Komplexitätsanzeigers angewendet werden können.
  • AUSFÜHRLICHE BESCHREIBUNG DER ZEICHNUNGEN
  • Während die Konzepte der vorliegenden Offenbarung für verschiedene Modifikationen und alternative Formen empfänglich sind, werden spezifische Ausführungsformen davon beispielhaft in den Zeichnungen gezeigt und hier ausführlich beschrieben. Es ist jedoch zu verstehen, dass keine Absicht besteht, die Konzepte der vorliegenden Offenbarung auf die speziellen offenbarten Formen zu beschränken, sondern im Gegenteil die Absicht darin besteht, alle Modifikationen, Äquivalente und Alternativen, die der vorliegenden Offenbarung und den angefügten Patentansprüchen entsprechen, zu umfassen.
  • Bezugnahmen in der Patentschrift auf „eine Ausführungsform“, „ein Ausführungsbeispiel“, „eine veranschaulichende Ausführungsform“ usw. zeigen an, dass die beschriebene Ausführungsform ein bestimmtes Merkmal, eine bestimmte Struktur oder Charakteristik aufweisen kann, aber jede Ausführungsform kann dieses bestimmte Merkmal, diese bestimmte Struktur oder Charakteristik aufweisen oder nicht notwendigerweise aufweisen. Zudem beziehen sich solche Formulierungen nicht notwendigerweise auf die gleiche Ausführungsform. Wenn ein bestimmtes Merkmal, eine bestimmte Struktur oder Charakteristik in Verbindung mit einer Ausführungsform beschrieben wird, wird ferner unterbreitet, dass es innerhalb des Wissens eines Fachmanns liegt, ein derartiges Merkmal, eine derartige Struktur oder Charakteristik in Verbindung mit anderen Ausführungsformen, ob nun explizit beschrieben oder nicht, zu bewirken. Zusätzlich ist anzumerken, dass Elemente, die in einer Liste in Form von „mindestens ein A, B und C“ aufgeführt sind, (A); (B); (C); (A und B); (A und C); (B und C) oder (A, B, und C) bedeuten können. Gleichermaßen können in Form von „mindestens eines von A, B oder C“ aufgelistete Elemente bedeuten: (A); (B); (C); (A und B); (A und C); (B und C) oder (A, B und C).
  • Die offenbarten Ausführungsformen können in einigen Fällen in Hardware, Firmware, Software oder einer beliebigen Kombination davon realisiert sein. Die offenbarten Ausführungsformen können auch als von einem transitorischen oder nicht transitorischen maschinenlesbaren (z. B. computerlesbaren) Speichermedium getragene oder darauf gespeicherte Anweisungen realisiert sein, die von einem oder mehreren Prozessoren gelesen und ausgeführt werden können. Ein maschinenlesbares Speichermedium kann als beliebige Speichervorrichtung, beliebiger Mechanismus oder andere physikalische Struktur zum Speichern oder Übertragen von Informationen in einer durch eine Maschine lesbaren Form (z. B. ein flüchtiger oder nicht flüchtiger Speicher, eine Medien-Disc oder andere Medienvorrichtung) ausgeführt sein.
  • In den Zeichnungen können manche Struktur- oder Verfahrensmerkmale in spezifischen Anordnungen und/oder Ordnungen dargestellt sein. Es ist jedoch anzumerken, dass solche spezifischen Anordnungen und/oder Ordnungen unter Umständen nicht erforderlich sind. Vielmehr können in einigen Ausführungsformen solche Merkmale in einer anderen Weise und/oder Reihenfolge als in den veranschaulichenden Zeichnungen dargestellt angeordnet sein. Zusätzlich bedeutet das Einbeziehen eines Struktur- oder Verfahrensmerkmals in einer bestimmten Figur nicht, dass ein solches Merkmal in allen Ausführungsformen erforderlich ist, und es kann in einigen Ausführungsformen nicht enthalten sein oder mit anderen Merkmalen kombiniert sein.
  • Nunmehr Bezug nehmend auf 1 umfasst eine veranschaulichende Rechenvorrichtung 100 für Software-Analyse einen Prozessor 120, ein Ein-/Ausgabe-(I/O)-Subsystem 122, einen Speicher 124 und eine Datenspeichervorrichtung 126. Im Einsatz, wie nachstehend beschrieben, ist die Rechenvorrichtung 100 dazu ausgebildet, eine binäre Analyse von Nativer-Code-Segmenten durchzuführen, wenn ein Verwalteter-Code-Segment das Nativer-Code-Segment aufruft. Beispielsweise kann die Rechenvorrichtung 100 einen Thread ausführen, der von einem Verwalteter-Code-Segment zu einem Nativer-Code-Segment übergeht. Dabei kann der Thread einen Aufruf von dem Verwalteter-Code-Segment an das Nativer-Code-Segment einleiten. Als Reaktion führt die Rechenvorrichtung 100 eine binäre Analyse des Nativer-Code-Segments durch und erzeugt einen Komplexitätsanzeiger, der einen Komplexitätsgrad des Nativer-Code-Segments auf Grundlage der binären Analyse anzeigt. Hierfür kann die Rechenvorrichtung 100 vordefinierte Komplexitätsregeln auf das Nativer-Code-Segment anwenden, um den Komplexitätsgrad zu bestimmen.
  • Zusätzlich speichert die Rechenvorrichtung 100 einen Status des Threads auf Grundlage des Komplexitätsanzeigers. Beispielsweise ist, wenn der Komplexitätsanzeiger anzeigt, dass der native Code einen niedrigen Komplexitätsgrad (z. B. einfach) aufweist, die Rechenvorrichtung 100 dazu ausgebildet, den aktuellen Status des Threads zum Anzeigen, dass die Rechenvorrichtung 100 verwalteten Code ausführt, beizubehalten, auch wenn der Thread den nativen Code ausführt. Dementsprechend erfährt der Thread keinen relativ zeitintensiven Zustandsübergang beim Aufrufen des nativen Codes mit dem niedrigen Komplexitätsgrad. Somit können einige Software-Elemente reaktionsfähiger sein. Beispielsweise können Benutzerschnittstellenelemente, die in nativem Code implementiert sind, reaktionsfähiger sein gegenüber der Ausführung durch herkömmliche Laufzeiten, die zwischen verwaltetem Code und nativem Code übergehen. Wenn hingegen der Komplexitätsanzeiger einen höheren Komplexitätsgrad (z. B. komplex) anzeigt, ist die Rechenvorrichtung 100 dazu ausgebildet, den Status des Threads zum Anzeigen, dass der Thread nativen Code ausführt, zu setzen.
  • Die Rechenvorrichtung 100 kann als jegliche Art von Vorrichtung ausgeführt sein, die Verwalteter-Code-Segmente und Nativer-Code-Segmente auszuführen vermag und sonst die hier beschriebenen Funktionen durchzuführen vermag. Beispielsweise kann die Rechenvorrichtung 100 ohne Beschränkung als ein Laptop-Computer, ein Notebook-Computer, ein Tablet-Computer, ein Smartphone, eine mobile Rechenvorrichtung, ein Computer, ein Desktop-Computer, eine Workstation, ein Servercomputer, ein verteiltes Rechnersystem, ein Mehrprozessorsystem, ein Unterhaltungselektronikgerät, ein intelligentes Haushaltsgerät und/oder jede andere Rechenvorrichtung, die Software-Code-Segmente zu analysieren vermag, ausgeführt sein. Wie in 1 gezeigt, umfasst die veranschaulichende Rechenvorrichtung 100 den Prozessor 120, das I/O-Subsystem 122, den Speicher 124 und die Datenspeichervorrichtung 126. Selbstverständlich kann die Rechenvorrichtung 100 andere oder zusätzliche Komponenten, wie zum Beispiel solche, die im Allgemeinen in einer Workstation vorhanden sind (z. B. diverse Eingabe-/Ausgabegeräte), in anderen Ausführungsformen aufweisen. Zusätzlich können in einigen Ausführungsformen eine oder mehrere der veranschaulichenden Komponenten in einer anderen Komponente integriert sein oder anderweitig einen Teil davon bilden. Beispielsweise können in einigen Ausführungsformen der Speicher 124 oder Teile davon in dem Prozessor 120 integriert sein.
  • Der Prozessor 120 kann als jegliche Art von Prozessor ausgeführt sein, der die hier beschriebenen Funktionen durchzuführen vermag. Beispielsweise kann der Prozessor als Einkern- oder Mehrkernprozessor(en), digitaler Signalprozessor, Mikrocontroller oder anderer Prozessor oder andere Verarbeitungs-/Steuerungsschaltung ausgeführt sein. Gleichermaßen kann der Speicher 124 als jegliche Art von flüchtigem oder nicht flüchtigem Speicher oder Datenspeicher ausgeführt sein, die die hier beschriebenen Funktionen durchzuführen vermögen. In Betrieb kann der Speicher 124 verschiedene während des Betriebs der Rechenvorrichtung 100 verwendete Daten und Software speichern wie zum Beispiel Betriebssysteme, Anwendungen, Programme, Bibliotheken und Treiber. Der Speicher 124 ist kommunikativ mit dem Prozessor 120 über das I/O-Subsystem 122 gekoppelt, das als Schaltungsanordnung und/oder Komponenten zum Erleichtern von Eingabe-/Ausgabeoperationen mit dem Prozessor 120, dem Speicher 124 und anderen Komponenten der Rechenvorrichtung 100 ausgeführt sein kann. Beispielsweise kann das I/O-Subsystem 122 als Memory Controller Hubs, Eingabe-/Ausgabe-Steuerungs-Hubs, Firmware-Vorrichtungen, Kommunikationsverbindungen (z. B. Punkt-zu-Punkt-Verbindungen, Bus-Verbindungen, Leitungen, Kabel, Lichtleiter, Platinenleiterbahnen usw.) und/oder andere Komponenten und Subsysteme zum Erleichtern der Eingabe-/ Ausgabeoperationen ausgeführt sein oder diese anderweitig umfassen. In einigen Ausführungsformen kann das I/O-Subsystem 122 einen Teil eines SoC (System-on-a-Chip) bilden und zusammen mit dem Prozessor 120, dem Speicher 124 und anderen Komponenten der Rechenvorrichtung 100 auf einem integrierten Schaltungschip integriert sein.
  • Die Datenspeichervorrichtung 126 kann als jegliche Art von Vorrichtung oder Vorrichtungen, die für eine kurzzeitige oder langzeitige Speicherung von Daten ausgebildet sind, ausgeführt sein wie zum Beispiel Speichervorrichtungen oder -schaltungen, Speicherkarten, Festplattenlaufwerke, Solid-State-Drives oder andere Datenspeichervorrichtungen. Die Datenspeichervorrichtung 126 kann Verwalteter-Code-Segmente, Nativer-Code-Segmente und Regeln zur Bestimmung einer Komplexität der Nativer-Code-Segmente speichern.
  • Die Rechenvorrichtung 100 kann auch ein Kommunikations-Subsystem 128 aufweisen, das als jede Kommunikationsschaltung, -vorrichtung oder Sammlung davon ausgeführt sein kann, die Kommunikation zwischen der Rechenvorrichtung 100 und anderen entfernten Vorrichtungen über ein Computer-Netzwerk (nicht dargestellt) zu ermöglichen vermögen. Das Kommunikations-Subsystem 128 kann dazu ausgebildet sein, eine beliebige oder mehrere Kommunikationstechniken (z. B. drahtgebundene oder drahtlose Kommunikation) und zugehörige Protokolle (z. B. Ethernet, Bluetooth®, Wi-Fi®, WiMAX usw.) zu verwenden, um eine solche Kommunikation zu bewirken.
  • Zusätzlich kann die Rechenvorrichtung 100 eine Anzeigeeinrichtung 130 aufweisen, die als eine jegliche Art von Anzeigeeinrichtung, die digitale Informationen anzuzeigen vermag, ausgeführt sein kann wie zum Beispiel eine Flüssigkristallanzeige (LCD), lichtemittierende Dioden (LED), eine Plasmaanzeige, eine Kathodenstrahlröhre (CRT) oder andere Arten von Anzeigevorrichtungen. In einigen Ausführungsformen kann die Rechenvorrichtung 100 auch ein oder mehrere Peripheriegeräte 132 aufweisen. Die Peripheriegeräte 132 können eine beliebige Anzahl zusätzlicher Eingabe-/Ausgabegeräte, Schnittstellengeräte und/oder anderer Peripheriegeräte umfassen.
  • Nunmehr Bezug nehmend auf 2 erstellt in der veranschaulichenden Ausführungsform die Rechenvorrichtung 100 eine Umgebung 200 während des Betriebs. Die veranschaulichende Ausführungsform 200 umfasst ein Modul 222 für Initiierung nativen Codes, ein Modul 224 für binäre Analyse und ein Modul 232 für Ausführung nativen Codes. Die verschiedenen Module der Umgebung 200 können als Hardware, Firmware, Software oder eine Kombination davon ausgeführt sein. Beispielsweise können die verschiedenen Module, Logik und andere Komponenten der Umgebung 200 einen Teil des Prozessors 120 oder anderer Hardware-Komponenten der Rechenvorrichtung 100 bilden oder anderweitig dadurch erstellt werden. Somit können in einigen Ausführungsformen eines oder mehrere der Module der Umgebung 200 als Schaltungsanordnung oder Sammlung elektrischer Vorrichtungen ausgeführt sein (z. B. eine Schaltung 222 für Initiierung nativen Codes, eine Schaltung 224 für binäre Analyse und eine Schaltung 232 für Ausführung nativen Codes usw.). Es ist anzumerken, dass in solchen Ausführungsformen eine oder mehrere der Schaltungen (z. B. die Schaltung 222 für Initiierung nativen Codes, die Schaltung 224 für binäre Analyse und die Schaltung 232 für Ausführung nativen Codes usw.) einen Teil eines oder mehr als eines des Prozessors 120, des Speichers 124, des I/O-Subsystems 122 und/oder des Datenspeichers 126 bilden können. Zusätzlich können in einigen Ausführungsformen eines oder mehrere der veranschaulichenden Module einen Teil eines anderen Moduls bilden und/oder können eines oder mehrere der veranschaulichenden Module voneinander unabhängig sein.
  • Im Einsatz kann die Rechenvorrichtung 100 eine Anwendung 202 ausführen, die einen oder mehrere Threads umfassen kann. Beispielsweise umfasst in der veranschaulichenden Ausführungsform von 2 die Anwendung 202 einen ersten Thread 204 und einen zweiten Thread 206. Während der Ausführung können der erste Thread 204 und der zweite Thread 206 auf einen Speicherbereich 208 zugreifen. Die veranschaulichende Anwendung 202 umfasst auch Verwalteter-Code-Segmente 214 und Nativer-Code-Segmente 216. In einigen Ausführungsformen können eines oder mehrere der Nativer-Code-Segmente 216 in einer oder mehreren Bibliotheken, zum Beispiel gemeinsamen Bibliotheken 218, gespeichert werden. Die gemeinsamen Bibliotheken können beispielsweise „Dynamic Link Libraries“ (DLL) oder „Dynamic Shared Objects“ (DSO) umfassen. Die veranschaulichende Anwendung 202 umfasst auch eine Benutzerschnittstelle 212, die mindestens teilweise mit den Nativer-Code-Segmenten 216 realisiert ist, während andere Teile der Anwendung 202 mit den Verwalteter-Code-Segmenten 214 realisiert sind. Selbstverständlich ist die Anwendung 202 lediglich zu Veranschaulichungszwecken dargestellt und es ist anzumerken, dass andere Arten von Anwendungen 202 (z. B. Anwendungen mit einer größeren Anzahl von Threads) von der Rechenvorrichtung 100 unter Verwendung der hier beschriebenen Technologien ausgeführt werden können.
  • Das Modul 222 für Initiierung nativen Codes ist dazu ausgebildet, einen Aufruf 220 von einem Thread, beispielsweise dem das Verwalteter-Code-Segment 214 ausführenden ersten Thread 204, zum Ausführen eines der Nativer-Code-Segmente 216 zu empfangen. Als Reaktion ist das Modul 222 für Initiierung nativen Codes dazu ausgebildet, das Nativer-Code-Segment 216 zu laden, zum Beispiel durch Laden der zugehörigen gemeinsamen Bibliothek 218. Zusätzlich ist das Modul 222 für Initiierung nativen Codes dazu ausgebildet, zu bestimmen, ob das Nativer-Code-Segment 216 zuvor registriert wurde. Beispielsweise kann das Modul 222 für Initiierung nativen Codes bestimmen, ob ein Flag 225 in einer Registrierungsdatenbank 223 gespeichert wurde, das anzeigt, dass das Nativer-Code-Segment 216 zuvor durch Rechenvorrichtung 100 analysiert und ausgeführt wurde. Falls das Nativer-Code-Segment 216 nicht registriert wurde, überträgt das Modul 222 für Initiierung nativen Codes den Code an das Modul 224 für binäre Analyse und speichert ein Flag 225 in der Registrierungsdatenbank 223, das anzeigt, dass das Nativer-Code-Segment 216 registriert wurde. Wenn hingegen das Nativer-Code-Segment 216 bereits registriert wurde, überträgt das Modul 222 für Initiierung nativen Codes das Nativer-Code-Segment 216 direkt an das Modul 232 für Ausführung nativen Codes.
  • Das Modul 224 für binäre Analyse ist dazu ausgebildet, eine binäre Analyse des Nativer-Code-Segments 216 durchzuführen, um einen Komplexitätsgrad des Nativer-Code-Segments 216 zu bestimmen. Hierfür kann das Modul 224 für binäre Analyse das Nativer-Code-Segment 216 auf den Speicherbereich 208 vor dem Analysieren des Nativer-Code-Segments 216 abbilden. Ferner ist das Modul 224 für binäre Analyse dazu ausgebildet, auf Grundlage der binären Analyse einen Komplexitätsanzeiger 226 zu erstellen, der einen Komplexitätsgrad des Nativer-Code-Segments 216 anzeigt. Beispielsweise kann der Komplexitätsanzeiger 226 als ein Zahlenwert ausgeführt sein, der den Komplexitätsgrad und/oder diesbezügliche Eigenschaften bezeichnet. Der bestimmte Komplexitätsgrad des Nativer-Code-Segments 216 kann auf verschiedenen Eigenschaften des Nativer-Code-Segments 216 basieren, die auf komplexen Code hinweisen, einschließlich, jedoch nicht darauf beschränkt, der Anzahl von in dem Nativer-Code-Segment 216 enthaltenen Anweisungen, Schleifen und/oder indirekten Kontrollflüssen. Somit kann in der veranschaulichenden Ausführungsform der Komplexitätsanzeiger 226 die Anzahl der Anweisungen in dem Nativer-Code-Segment 216, die Anzahl der Schleifen in dem Nativer-Code-Segment 216 und/oder die Anzahl indirekter Kontrollflüsse in dem Nativer-Code-Segment 216 bezeichnen. In einigen Ausführungsformen kann das Modul 224 für binäre Analyse den Wert des Komplexitätsanzeigers 226 durch Vergleichen des Nativer-Code-Segments 216 mit einer oder mehreren vordefinierten Komplexitätsregeln 228 bestimmen, wie nachstehend ausführlicher beschrieben wird. Zusätzlich kann bei Durchführung der binären Analyse das Modul 224 für binäre Analyse dazu ausgebildet sein, einen oder mehrere Kontrollflussgraphen 230, die mögliche Ausführungspfade durch das Nativer-Code-Segment 216 definieren, zu erstellen. Das Erstellen der Kontrollflussgraphen 230 durch das Modul 224 für binäre Analyse ist nachstehend ausführlicher beschrieben.
  • Das Modul 232 für Ausführung nativen Codes ist dazu ausgebildet, einen Status 236 des entsprechenden Threads (z. B. ersten Threads 204) auf Grundlage des Komplexitätsanzeigers 226 zu speichern und das Nativer-Code-Segment 216 in dem entsprechenden Thread (z. B. ersten Thread 204) auszuführen. Beispielsweise kann das Modul 232 für Ausführung nativen Codes den Komplexitätsanzeiger 226 von dem Modul 232 für Ausführung nativen Codes empfangen und den Komplexitätsanzeiger 226 mit einer vordefinierten Referenzkomplexität 234 vergleichen. Wenn der Komplexitätsanzeiger 226 der vordefinierten Referenzkomplexität 234 genügt (z. B. wenn der Komplexitätsanzeiger 226 kleiner oder gleich der vordefinierten Referenzkomplexität 234 ist), setzt das Modul 232 für Ausführung nativen Codes den Thread-Status 236 zum Anzeigen, dass der entsprechende Thread (z. B. erster Thread 204) verwalteten Code ausführt. In einigen Ausführungsformen kann der Thread-Status 236 bereits zum Anzeigen, dass der erste Thread 204 verwalteten Code ausführt, gesetzt sein und Modul 232 für Ausführung nativen Codes behält einfach den Thread-Status 236 bei der gegenwärtigen Einstellung bei. Wenn hingegen der Komplexitätsanzeiger 226 nicht der vordefinierten Referenzkomplexität 234 genügt (z. B. wenn der Komplexitätsanzeiger 226 größer als die vordefinierte Referenzkomplexität 234 ist), ist das Modul 232 für Ausführung nativen Codes dazu ausgebildet, eine Sperre auf dem Nativer-Code-Segment 216 zu veranlassen und den Thread-Status 236 zum Anzeigen, dass der Thread nativen Code ausführt, zu ändern. Zusätzlich ist, wenn der erste Thread 204 das Nativer-Code-Segment 216 vollständig ausgeführt hat, das Modul 232 für Ausführung nativen Codes dazu ausgebildet, eine zweite Sperre zu veranlassen und den Thread-Status 236 zum Anzeigen, dass der erste Thread 204 verwalteten Code ausführt, zu ändern.
  • Nunmehr Bezug nehmend auf 3 kann im Einsatz die Rechenvorrichtung 100 ein Verfahren 300 zum Aufrufen von nativem Code (z. B. dem Nativer-Code-Segment 216) aus verwaltetem Code (z. B. dem Verwalteter-Code-Segment 214) unter Verwendung binärer Analyse ausführen. Das Verfahren 300 beginnt in Block 302, worin das Modul 222 für Initiierung nativen Codes von Rechenvorrichtung 100 einen Aufruf (z. B. Aufruf 220) von einem Thread (z. B. dem ersten Thread 204) zum Ausführen eines nativen Segments Code (z. B. des Nativer-Code-Segments 216) empfängt. Wie in Block 304 angegeben, kann in einigen Ausführungsformen der aufrufende Thread verwalteten Code, zum Beispiel Verwalteter-Code-Segment 214, ausführen, wenn das Modul 222 für Initiierung nativen Codes den Aufruf 220 zum Ausführen des Nativer-Code-Segments 216 empfängt. Wie in Block 306 angegeben, kann in einigen Ausführungsformen die Rechenvorrichtung 100 das Nativer-Code-Segment 216 aus einer gemeinsamen Bibliothek, zum Beispiel gemeinsamer Bibliothek 218, laden. In Block 308 bestimmt die Rechenvorrichtung 100, ob das Nativer-Code-Segment 216 bereits registriert wurde. Beispielsweise kann die Rechenvorrichtung 100 in einigen Ausführungsformen bestimmen, ob Registrierungsdatenbank 223 einen Anzeiger oder ein Flag 225 enthält, der bzw. das anzeigt, dass das Nativer-Code-Segment 216 registriert ist.
  • Wenn das Nativer-Code-Segment 216 bereits registriert ist, fährt das Verfahren 300 fort mit Block 322, worin die Rechenvorrichtung 100 auf das Durchführen einer binären Analyse des Nativer-Code-Segments 216 verzichtet und stattdessen das Nativer-Code-Segment 216 ausführt. Wenn hingegen die Rechenvorrichtung 100 bestimmt, dass das Nativer-Code-Segment 216 in Block 308 nicht bereits registriert war, fährt das Verfahren 300 fort mit Block 310. In Block 310 analysiert die Rechenvorrichtung 100 die Komplexität des Nativer-Code-Segments 216. Beispielsweise führt in der veranschaulichenden Ausführungsform die Rechenvorrichtung 100 eine binäre Analyse des Nativer-Code-Segments 216 in Block 312 durch. Hierfür kann die Rechenvorrichtung 100 jede geeignete Methode zum Durchführen der binären Analyse an dem Nativer-Code-Segment 216 nutzen. Ein veranschaulichendes Verfahren zum Durchführen einer binären Analyse, das in Block 312 ausgeführt werden kann, ist nachstehend mit Bezug auf Verfahren 400 aus 4 beschrieben.
  • In Block 314 kann die Rechenvorrichtung 100 auch einen Komplexitätsanzeiger erzeugen (z. B. den Komplexitätsanzeiger 226), der eine Angabe des Komplexitätsgrads des Nativer-Code-Segments 216 auf Grundlage der Komplexitätsanalyse liefert. Abermals kann die Rechenvorrichtung 100 jede geeignete Methode zum Erzeugen eines Komplexitätsanzeigers nutzen. Ein veranschaulichendes Verfahren zum Erzeugen eines Komplexitätsanzeigers, das in Block 314 ausgeführt werden kann, ist nachstehend mit Bezug auf Verfahren 500 aus 5 beschrieben.
  • Anstatt Block 310 als Reaktion auf das Empfangen eines Aufrufs von einem verwalteten Code ausführenden Thread auszuführen, lädt in einigen Ausführungsformen die Rechenvorrichtung 100 (z. B. das Modul 222 für Initiierung nativen Codes) den nativen Code vorzeitig und führt die binäre Analyse von Block 312 vorzeitig durch. Beispielsweise kann die Rechenvorrichtung den nativen Code laden und die binäre Analyse an dem nativen Code während einer vorzeitigen Kompilierung durchführen. In solchen Ausführungsformen, wenn das Modul 222 für Initiierung nativen Codes den Aufruf 220 von dem Thread 204 empfängt, bestätigt die Rechenvorrichtung 100, dass der auszuführende native Code (z. B. gemeinsame Bibliothek) der gleiche native Code ist, der zuvor in der vorzeitigen Kompilierung analysiert wurde, beispielsweise durch Vergleichen eines Hash-Werts des nativen Codes von der vorzeitigen Kompilierung mit einem Hash-Wert des durch den aufrufenden Thread 204 auszuführenden nativen Codes.
  • Nachdem die Rechenvorrichtung 100 den nativen Code in Block 310 analysiert hat, fährt das Verfahren 300 fort mit Block 316. In Block 316 bestimmt die Rechenvorrichtung 100, ob der Komplexitätsanzeiger 226 einen niedrigen Komplexitätsgrad anzeigt. Hierfür kann die Rechenvorrichtung zum Beispiel den in Block 314 bestimmten Komplexitätsanzeiger 226 mit der vordefinierten Referenzkomplexität 234 vergleichen. Wenn der Komplexitätsanzeiger 226 der vordefinierten Referenzkomplexität 234 genügt (z. B. kleiner oder gleich dieser ist), kann die Rechenvorrichtung 100 bestimmen, dass Komplexitätsanzeiger 226 einen niedrigen Komplexitätsgrad (z. B. einfach) anzeigt. Wenn der Komplexitätsanzeiger 226 jedoch nicht der vordefinierten Referenzkomplexität 234 genügt (z. B. größer dieser ist), kann die Rechenvorrichtung 100 bestimmen, dass der Komplexitätsanzeiger 226 einen höheren Komplexitätsgrad (z. B. komplex) anzeigt.
  • Wenn in Block 316 der Komplexitätsanzeiger 226 anzeigt, dass der native Code komplex ist, fährt das Verfahren fort mit Block 318, worin die Rechenvorrichtung 100 den Thread-Status 236 zum Anzeigen, dass das Code-Segment nativer Code ist, ändert. Das Verfahren 300 fährt anschließend fort mit Block 322, worin die Rechenvorrichtung 100 das Nativer-Code-Segment ausführt.
  • Wenn jedoch in Block 316 der Komplexitätsanzeiger 226 anzeigt, dass der native Code nicht komplex ist, fährt das Verfahren 300 fort mit Block 320. In Block 320 setzt oder behält die Rechenvorrichtung 100 den Thread-Status 236 zum Anzeigen, dass das Code-Segment verwalteter Code ist (auch wenn das Code-Segment tatsächlich nativer Code ist). Durch Vermeiden des Übergangs des Thread-Status 236 von einer Anzeige verwalteten Codes zu einer Anzeige nativen Codes verhindert die Rechenvorrichtung 100 das Platzieren einer Sperre auf dem Nativer-Code-Segment 216, das ansonsten deutliche Verzögerungen bei der Verarbeitung des Nativer-Code-Segments 216 erleiden kann. Beispielsweise kann in Ausführungsformen, in denen das Nativer-Code-Segment 216 die Funktionalität der Benutzerschnittstelle 212 steuert, das Verhindern, dass der Thread-Status 236 von einer Anzeige der Ausführung verwalteten Codes zu einer Anzeige der Ausführung nativen Codes übergeht, die Reaktionsfähigkeit der Benutzerschnittstelle hinsichtlich Benutzerinteraktionen erhöhen und die zeitintensive Sperre vermeiden, die ansonsten zum Ändern des Thread-Status 236 ausgeführt würde.
  • Nachdem der Thread-Status 236 in Block 318 geändert oder in Block 320 gesetzt/beibehalten wurde, fährt das Verfahren 300 fort mit Block 322. In Block 322 führt die Rechenvorrichtung 100 das Nativer-Code-Segment aus. Das Verfahren 300 kann anschließend in einer Schleife zurückkehren zu Block 300, worin das Modul 222 für Initiierung nativen Codes von Rechenvorrichtung 100 einen weiteren Aufruf von einem Thread zum Ausführen eines nativen Segments Code empfangen kann.
  • Nunmehr Bezug nehmend auf 4 kann wie vorstehend erörtert die Rechenvorrichtung 100 ein Verfahren 400 zum Durchführen einer binären Analyse an dem nativen Code während des Betriebs ausführen (z. B. in Block 312 von Verfahren 300 aus 3). Das Verfahren 400 beginnt mit Block 402, worin die Rechenvorrichtung 100 das Nativer-Code-Segment 216 auf den Speicherbereich 208 des ersten Threads 204 abbildet. Anschließend bestimmt in Block 404 die Rechenvorrichtung 100 eine Startadresse (z. B. in 6 gezeigte Startadresse 602) des Nativer-Code-Segments 216 in dem Speicherbereich 208. In Block 406 startet die Rechenvorrichtung 100 einen Teilkontrollgraphen (z. B. einen von Kontrollflussgraphen 230) bei der Startadresse.
  • Anschließend bestimmt in Block 408 die Rechenvorrichtung 100, ob ein nicht identifizierter Opcode (z. B. ein in 6 nicht identifizierter Opcode 604) in dem Nativer-Code-Segment 216 erfasst wurde. Falls ja, fährt das Verfahren 400 fort mit Block 412, worin die Rechenvorrichtung 100 das bestimmte Code-Segment als eine komplexe Struktur (z. B. den nicht identifizierten Opcode) aufweisend kennzeichnet. Das Verfahren 400 fährt anschließend fort mit Block 420, worin die Rechenvorrichtung 100 den gegenwärtigen Teilkontrollflussgraphen beendet.
  • Wieder Bezug nehmend auf Block 408 fährt das Verfahren 400 fort mit Block 410, wenn die Rechenvorrichtung 100 keinen nicht identifizierten Opcode 604 in dem Nativer-Code-Segment 216 erfasst. In Block 410 bestimmt die Rechenvorrichtung 100, ob ein indirekter Kontrollfluss (z. B. indirekter Kontrollfluss 612 in 6) in dem Nativer-Code-Segment 216 erfasst wurde. Falls ja, fährt das Verfahren 400 fort mit Block 412, worin die Rechenvorrichtung 100 das bestimmte Code-Segment als eine komplexe Struktur (z. B. den indirekten Kontrollfluss) aufweisend kennzeichnet. Das Verfahren 400 fährt anschließend fort mit Block 420, worin die Rechenvorrichtung 100 den gegenwärtigen Teilkontrollflussgraphen beendet.
  • Wieder Bezug nehmend auf Block 410 fährt das Verfahren 400 fort mit Block 414, wenn die Rechenvorrichtung 100 keinen indirekten Kontrollfluss erfasst. In Block 414 bestimmt die Rechenvorrichtung 100, ob ein Rückgabebefehl (z. B. Rückgabebefehl 608 in 6) in dem Nativer-Code-Segment 216 erfasst wurde. Falls ja, fährt das Verfahren 400 fort mit Block 420, worin die Rechenvorrichtung 100 den gegenwärtigen Teilkontrollflussgraphen beendet.
  • Wieder Bezug nehmend auf Block 414 fährt das Verfahren 400 fort mit Block 416, wenn die Rechenvorrichtung 100 keinen Rückgabebefehl 608 erfasst. In Block 416 bestimmt die Rechenvorrichtung 100, ob ein geschachtelter Funktionsaufruf (z. B. geschachtelter Funktionsaufruf 610 in 6) in dem Nativer-Code-Segment 216 erfasst wurde. Falls ja, fährt das Verfahren 400 fort mit Block 418, worin die Rechenvorrichtung 100 einen neuen Teilkontrollflussgraphen beginnt, und kehrt das Verfahren in einer Schleife zurück zu Block 408 zum Beginnen der Analyse des neuen Teilkontrollflussgraphen in den Blöcken 408-416 wie vorstehend erörtert. Falls jedoch die Rechenvorrichtung 100 keinen geschachtelten Funktionsaufruf 610 in dem Nativer-Code-Segment 216 erfasst hat, fährt das Verfahren 400 fort mit Block 420, worin die Rechenvorrichtung 100 den gegenwärtigen Teilkontrollflussgraphen beendet.
  • Nunmehr Bezug nehmend auf 5 kann wie vorstehend erörtert die Rechenvorrichtung 100 einen Komplexitätsanzeiger zum Anzeigen des Komplexitätsgrads von nativem Code-Segment 216 während des Betriebs erzeugen (z. B. in Block 314 von Verfahren 300 aus 3). Das Verfahren 500 beginnt mit Block 502, worin die Rechenvorrichtung 100 eine Anzahl von Anweisungen 600 und eine Anzahl von Schleifen 606 bestimmt, die in dem Nativer-Code-Segment 216 vorhanden sind. Hierfür kann die Rechenvorrichtung 100 beispielsweise die durch das Verfahren 400 aus 4 erzeugten Kontrollflussgraphen 230 analysieren. Anschließend bestimmt in Block 504 die Rechenvorrichtung 100, ob die Anzahl von Anweisungen 600 in dem Nativer-Code-Segment 216 der vordefinierten Grenzanzahl 700 von Anweisungen genügt. Beispielsweise kann die Rechenvorrichtung 100 bestimmen, ob die Anzahl von Anweisungen 600 größer (oder gleich oder größer) der vordefinierten Grenzanzahl 700 von Anweisungen ist. Die vordefinierte Grenzanzahl 700 von Anweisungen kann zum Beispiel in den Komplexitätsregeln 228 gespeichert sein. Wenn die Anzahl von Anweisungen 600 der vordefinierten Grenzanzahl 700 von Anweisungen genügt, fährt das Verfahren 500 fort mit Block 506, worin die Rechenvorrichtung 100 den Komplexitätsanzeiger 226 zum Anzeigen eines höheren Komplexitätsgrads (z. B. komplex) setzt.
  • Wenn jedoch die Anzahl von Anweisungen 600 nicht der vordefinierten Grenzanzahl 700 von Anweisungen genügt, fährt das Verfahren 500 fort mit Block 508, worin die Rechenvorrichtung 100 bestimmt, ob Schleifen 606 in dem Nativer-Code-Segment 216 vorhanden sind. Hierfür kann in einigen Ausführungsformen die Rechenvorrichtung 100 bestimmen, ob die in Block 502 bestimmte Anzahl von Schleifen 606 einer vordefinierten Grenzanzahl von Schleifen entspricht. In anderen Ausführungsformen kann die Rechenvorrichtung 100 bestimmen, dass Schleifen 606 in dem Nativer-Code-Segment 216 vorhanden sind, wenn es mindestens eine Schleife gibt. Wenn die Rechenvorrichtung 100 bestimmt, dass Schleifen in dem Nativer-Code-Segment 216 vorhanden sind, fährt das Verfahren 500 ungeachtet dessen fort mit Block 506, worin die Rechenvorrichtung 100 den Komplexitätsanzeiger 226 zum Anzeigen eines höheren Komplexitätsgrads (z. B. komplex) setzt.
  • Wenn die Rechenvorrichtung 100 jedoch bestimmt, dass Schleifen 606 in dem Nativer-Code-Segment 216 nicht vorhanden sind, fährt das Verfahren 500 fort mit Block 510. In Block 510 bestimmt die Rechenvorrichtung, ob es eine komplexe Code-Struktur in dem Nativer-Code-Segment 216 gibt, wie durch das vorstehend erörterte Verfahren 400 bestimmt. Beispielsweise kann die Rechenvorrichtung 100 bestimmen, ob ein beliebiger nicht identifizierter Opcode und/oder beliebige indirekte Kontrollflüsse in dem Nativer-Code-Segment 216 erfasst wurden. Falls ja, fährt das Verfahren 500 fort mit Block 506, worin die Rechenvorrichtung 100 den Komplexitätsanzeiger 226 zum Anzeigen eines höheren Komplexitätsgrads (z. B. komplex) setzt. Falls jedoch keine komplexe Struktur in dem Nativer-Code-Segment 216 erfasst wurde, fährt das Verfahren 500 fort mit Block 512, worin die Rechenvorrichtung 100 den Komplexitätsanzeiger 226 zum Anzeigen eines niedrigeren Komplexitätsgrads (z. B. einfach) setzt.
  • Nunmehr Bezug nehmend auf 6 ist ein vereinfachtes Blockdiagramm von Komponenten des Nativer-Code-Segments 216, das von der Rechenvorrichtung 100 ausgeführt werden kann, gezeigt. Das veranschaulichende Nativer-Code-Segment 216 enthält Anweisungen 600, die als binäre Anweisungen, wie zum Beispiel Objektcode oder Maschinencode statt als Byte-Code, ausgeführt sein können. Zusätzlich enthält das Nativer-Code-Segment 216 veranschaulichend eine Startadresse 602 zum Beispiel eine Speicheradresse, die einen Ort der ersten Anweisung einer Funktion in dem Nativer-Code-Segment 216 angibt. Insbesondere kann in einigen Ausführungsformen der mit Bezug auf 2 beschriebene Aufruf 220 als ein Aufruf zum Ausführen einer Funktion, die bei der Startadresse 602 beginnt, ausgeführt sein. Das veranschaulichende Nativer-Code-Segment 216 kann zusätzlich Opcodes 604 enthalten, die durch Rechenvorrichtung 100 durchzuführende Operationen festlegen. Zusätzlich kann in zumindest einigen Ausführungsformen das Nativer-Code-Segment 216 eine oder mehrere Schleifen 606 enthalten. Ferner kann in einigen Ausführungsformen das Nativer-Code-Segment 216 einen Rückgabebefehl 608 enthalten, der den Ausführungsthread (z. B. ersten Thread 204) an eine aufrufende Funktion zurückgibt. Zusätzlich kann in einigen Ausführungsformen das veranschaulichende Nativer-Code-Segment 216 eine oder mehrere geschachtelte Funktionsaufrufe 610 enthalten. Das heißt, eine in dem Nativer-Code-Segment 216 definierte Funktion kann eine andere Funktion unter Nutzung eines geschachtelten Funktionsaufrufs 610 aufrufen. Ferner kann das veranschaulichende Nativer-Code-Segment 216 indirekte Kontrollflüsse 612 enthalten, die als Programmsteueranweisungen, die einen Ort im Speicher angeben, der die Adresse der nächsten auszuführenden Anweisung enthält, ausgeführt sind.
  • Nunmehr Bezug nehmend auf 7 ist ein vereinfachtes Blockdiagramm einer Ausführungsform der Komplexitätsregeln 228, die von der Rechenvorrichtung 100 zum Erzeugen des Komplexitätsanzeigers 226 angewendet werden können, gezeigt. Die veranschaulichenden Komplexitätsregeln 228 umfassen eine vordefinierte Grenzanzahl 700 von Anweisungen. Beispielsweise kann, wie vorstehend mit Bezug auf 5 beschrieben, die Rechenvorrichtung 100 die Anzahl von Anweisungen 600 in dem Nativer-Code-Segment 216 mit der Grenzanzahl 700 von Anweisungen vergleichen, um zu bestimmen, ob das Nativer-Code-Segment 216 komplex ist. Ferner können die veranschaulichenden Komplexitätsregeln 228 eine Grenzanzahl 702 von Schleifen umfassen. In einigen Ausführungsformen, wie vorstehend erörtert, kann die Grenzanzahl 702 von Schleifen als eins definiert sein. Dementsprechend bestimmt in solchen Ausführungsformen die Rechenvorrichtung 100, wenn die Rechenvorrichtung 100 eine einzelne Schleife 606 in dem Nativer-Code-Segment 216 erfasst, dass das Nativer-Code-Segment 216 einen höheren Komplexitätsgrad (z. B. komplex) hat. Selbstverständlich kann in anderen Ausführungsformen die Grenzanzahl 702 von Schleifen größer als eins sein. Zusätzlich können die veranschaulichenden Komplexitätsregeln 228 Regeln 704 für komplexe Strukturen umfassen. Beispielsweise können die Regeln 704 für komplexe Strukturen als Regeln ausgeführt sein, die anzeigen, dass das Nativer-Code-Segment 216 als komplex gelten sollte, wenn die Rechenvorrichtung in dem Nativer-Code-Segment 216 eine komplexe Struktur (z. B. einen indirekten Kontrollfluss 612 oder einen nicht identifizierten Opcode 604) in dem Nativer-Code-Segment 216 erfasst.
  • BEISPIELE
  • Veranschaulichende Beispiele der hier offenbarten Technologien sind nachfolgend bereitgestellt. Eine Ausführungsform der Technologien kann ein beliebiges oder mehrere der nachstehend beschriebenen Beispiele sowie jede Kombination davon umfassen.
  • Beispiel 1 umfasst eine Rechenvorrichtung zum Aufrufen nativen Codes aus verwaltetem Code unter Verwendung binärer Analyse, wobei die Rechenvorrichtung ein Modul für Initiierung nativen Codes zum Empfangen eines Aufrufs zum Ausführen eines Nativer-Code-Segments von einem Thread, der zum Ausführen eines Verwalteter-Code-Segments ausgebildet ist; ein Modul für binäre Analyse zum (i) Durchführen einer binären Analyse des Nativer-Code-Segments und (ii) Bestimmen eines Komplexitätsgrads des Nativer-Code-Segments auf Grundlage der binären Analyse; und ein Modul für Ausführung nativen Codes zum Bestimmen eines Status des Threads auf Grundlage des bestimmten Komplexitätsgrads und Ausführen des Nativer-Code-Segments auf Grundlage des Status des Threads, wobei der Status des Threads anzeigt, ob das Nativer-Code-Segment als ein natives oder ein Verwalteter-Code-Segment auszuführen ist, aufweist.
  • Beispiel 2 umfasst den Gegenstand von Beispiel 1 und wobei das Modul für Initiierung nativen Codes ferner dazu ausgebildet ist, zu bestimmen, ob das Nativer-Code-Segment eine Registrierung erfordert; und das Nativer-Code-Segment an das Modul für binäre Analyse als Reaktion auf eine Bestimmung, dass das Nativer-Code-Segment eine Registrierung erfordert, zu übertragen.
  • Beispiel 3 umfasst den Gegenstand eines der Beispiele 1 und 2 und wobei das Modul für Initiierung nativen Codes ferner dazu ausgebildet ist, das Nativer-Code-Segment aus einer gemeinsamen Bibliothek zu laden.
  • Beispiel 4 umfasst den Gegenstand eines der Beispiele 1-3 und wobei das Modul für binäre Analyse ferner dazu ausgebildet ist, das Nativer-Code-Segment auf einen mit dem Thread verbundenen Speicherbereich abzubilden.
  • Beispiel 5 umfasst den Gegenstand eines der Beispiele 1-4 und wobei das Modul für binäre Analyse ferner dazu ausgebildet ist, eine Anzahl von Anweisungen in dem Nativer-Code-Segment zu bestimmen; und zu bestimmen, ob die Anzahl von Anweisungen einer vordefinierten Grenzanzahl von Anweisungen genügt; wobei das Bestimmen des Komplexitätsgrads des Nativer-Code-Segments (i) Bestimmen, dass das Nativer-Code-Segment einen hohen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass die Anzahl von Anweisungen der vordefinierten Grenzanzahl von Anweisungen genügt, und (ii) Bestimmen, dass das Nativer-Code-Segment einen niedrigen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass die Anzahl von Anweisungen nicht der vordefinierten Grenzanzahl von Anweisungen genügt, umfasst.
  • Beispiel 6 umfasst den Gegenstand eines der Beispiele 1-5 und wobei das Modul für binäre Analyse ferner dazu ausgebildet ist, zu bestimmen, ob Schleifen in dem Nativer-Code-Segment existieren; wobei das Bestimmen des Komplexitätsgrads des Nativer-Code-Segments (i) Bestimmen, dass das Nativer-Code-Segment einen hohen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass Schleifen in dem Nativer-Code-Segment existieren, und (ii) Bestimmen, dass das Nativer-Code-Segment einen niedrigen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass Schleifen in dem Nativer-Code-Segment nicht existieren, umfasst.
  • Beispiel 7 umfasst den Gegenstand eines der Beispiele 1-6 und wobei das Modul für binäre Analyse ferner dazu ausgebildet ist, zu bestimmen, ob mindestens eines von einem indirekten Kontrollfluss und einem nicht identifizierten Opcode in dem Nativer-Code-Segment existiert; wobei das Bestimmen des Komplexitätsgrads des Nativer-Code-Segments (i) Bestimmen, dass das Nativer-Code-Segment einen hohen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass mindestens eines von einem indirekten Kontrollfluss und einem nicht identifizierten Opcode in dem Nativer-Code-Segment existiert, und (ii) Bestimmen, dass das Nativer-Code-Segment einen niedrigen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass keines von einem indirekten Kontrollfluss und einem nicht identifizierten Opcode in dem Nativer-Code-Segment existiert, umfasst.
  • Beispiel 8 umfasst den Gegenstand eines der Beispiele 1-7 und wobei das Modul für binäre Analyse ferner dazu ausgebildet ist, einen Komplexitätsanzeiger zu erzeugen, der den bestimmten Komplexitätsgrad anzeigt.
  • Beispiel 9 umfasst den Gegenstand eines der Beispiele 1-8 und wobei das Modul für Ausführung nativen Codes ferner dazu ausgebildet ist, zu identifizieren, ob der Komplexitätsanzeiger einen niedrigen Komplexitätsgrad oder einen hohen Komplexitätsgrad anzeigt; als Reaktion auf eine Bestimmung, dass der Komplexitätsanzeiger einen niedrigen Komplexitätsgrad anzeigt, den Status des Threads zum Anzeigen, dass das Nativer-Code-Segment als verwalteter Code auszuführen ist, beizubehalten; und als Reaktion auf eine Bestimmung, dass der Komplexitätsanzeiger einen hohen Komplexitätsgrad anzeigt, den Status des Threads zum Anzeigen, dass das Nativer-Code-Segment als nativer Code auszuführen ist, zu setzen.
  • Beispiel 10 umfasst den Gegenstand eines der Beispiele 1-9 und wobei der Komplexitätsanzeiger in Verbindung mit dem Nativer-Code-Segment gespeichert wird und das Modul für Initiierung nativen Codes ferner dazu ausgebildet ist, den Komplexitätsanzeiger abzurufen; einen in Verbindung mit dem Nativer-Code-Segment gespeicherten ersten Hash-Wert abzurufen; und den ersten Hash-Wert mit einem zu dem Nativer-Code-Segment zugehörigen zweiten Hash-Wert als Reaktion auf den Aufruf zum Ausführen des Nativer-Code-Segments zu vergleichen, um zu bestimmen, ob sich das Nativer-Code-Segment seit dem Speichern des Komplexitätsanzeigers geändert hat.
  • Beispiel 11 umfasst den Gegenstand eines der Beispiele 1-10 und wobei das Modul für binäre Analyse ferner dazu ausgebildet ist, eine Startadresse des Nativer-Code-Segments zu bestimmen; und mindestens einen Teilkontrollflussgraphen zu erstellen, der mit einer nativen Anweisung an dem Ort der Startadresse des Nativer-Code-Segments beginnt.
  • Beispiel 12 umfasst den Gegenstand eines der Beispiele 1-11 und wobei das Modul für binäre Analyse ferner dazu ausgebildet ist, zu erfassen, ob ein Rückgabebefehl in dem Nativer-Code-Segment vorhanden ist; und den Teilkontrollflussgraphen als Reaktion auf ein Erfassen eines Rückgabebefehls in dem Nativer-Code-Segment zu beenden.
  • Beispiel 13 umfasst den Gegenstand eines der Beispiele 1-12 und wobei das Modul für binäre Analyse ferner dazu ausgebildet ist, zu erfassen, ob ein nicht identifizierter Opcode in dem Nativer-Code-Segment vorhanden ist; und den Teilkontrollflussgraphen als Reaktion auf ein Erfassen eines nicht identifizierten Opcodes in dem Nativer-Code-Segment zu beenden.
  • Beispiel 14 umfasst den Gegenstand eines der Beispiele 1-13 und wobei das Modul für binäre Analyse ferner dazu ausgebildet ist, zu erfassen, ob ein indirekter Kontrollfluss in dem Nativer-Code-Segment vorhanden ist; und den Teilkontrollflussgraphen als Reaktion auf ein Erfassen eines indirekten Kontrollflusses in dem Nativer-Code-Segment zu beenden.
  • Beispiel 15 umfasst den Gegenstand eines der Beispiele 1-14 und wobei der Teilkontrollflussgraph ein erster Teilkontrollflussgraph ist, wobei das Modul für binäre Analyse ferner dazu ausgebildet ist, zu erfassen, ob ein geschachtelter Funktionsaufruf in dem Nativer-Code-Segment vorhanden ist; und einen zweiten Teilkontrollflussgraphen basierend auf einem geschachtelten Funktionsaufruf als Reaktion auf ein Erfassen des geschachtelten Funktionsaufrufs in dem Nativer-Code-Segment zu erstellen.
  • Beispiel 16 umfasst den Gegenstand eines der Beispiele 1-15 und wobei das Modul für binäre Analyse ferner dazu ausgebildet ist, die binäre Analyse des Nativer-Code-Segments während eines vorzeitigen Kompilierungsvorgangs durchzuführen.
  • Beispiel 17 umfasst ein Verfahren zum Aufrufen nativen Codes aus verwaltetem Code unter Verwendung binärer Analyse, wobei das Verfahren das Empfangen durch eine Rechenvorrichtung eines Aufrufs zum Ausführen eines Nativer-Code-Segments von einem Thread, der zum Ausführen eines Verwalteter-Code-Segments ausgebildet ist; das Durchführen durch die Rechenvorrichtung einer binären Analyse des Nativer-Code-Segments; das Bestimmen durch die Rechenvorrichtung eines Komplexitätsgrads des Nativer-Code-Segments auf Grundlage der binären Analyse; das Bestimmen durch die Rechenvorrichtung eines Status des Threads auf Grundlage des bestimmten Komplexitätsgrads; und das Ausführen durch die Rechenvorrichtung des Nativer-Code-Segments auf Grundlage des Status des Threads, wobei der Status des Threads anzeigt, ob das Nativer-Code-Segment als ein natives oder ein Verwalteter-Code-Segment auszuführen ist, umfassst.
  • Beispiel 18 umfasst den Gegenstand von Beispiel 17 und umfasst ferner das Bestimmen durch die Rechenvorrichtung, ob das Nativer-Code-Segment eine Registrierung erfordert; und das Durchführen durch die Rechenvorrichtung der binären Analyse als Reaktion auf eine Bestimmung, dass das Nativer-Code-Segment eine Registrierung erfordert.
  • Beispiel 19 umfasst den Gegenstand eines der Beispiele 17 und 18 und umfasst ferner das Laden durch die Rechenvorrichtung des Nativer-Code-Segments aus einer gemeinsamen Bibliothek.
  • Beispiel 20 umfasst den Gegenstand eines der Beispiele 17-19 und umfasst ferner das Abbilden durch die Rechenvorrichtung des Nativer-Code-Segments auf einen mit dem Thread verbundenen Speicherbereich.
  • Beispiel 21 umfasst den Gegenstand eines der Beispiele 17-20 und umfasst ferner das Bestimmen durch die Rechenvorrichtung einer Anzahl von Anweisungen in dem Nativer-Code-Segment; und das Bestimmen durch die Rechenvorrichtung, ob die Anzahl von Anweisungen einer vordefinierten Grenzanzahl von Anweisungen genügt; und wobei das Bestimmen des Komplexitätsgrads des Nativer-Code-Segments (i) Bestimmen, dass das Nativer-Code-Segment einen hohen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass die Anzahl von Anweisungen der vordefinierten Grenzanzahl von Anweisungen genügt, und (ii) Bestimmen, dass das Nativer-Code-Segment einen niedrigen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass die Anzahl von Anweisungen nicht der vordefinierten Grenzanzahl von Anweisungen genügt, umfasst.
  • Beispiel 22 umfasst den Gegenstand eines der Beispiele 17-21 und umfasst ferner das Bestimmen durch die Rechenvorrichtung, ob Schleifen in dem Nativer-Code-Segment existieren; und wobei das Bestimmen des Komplexitätsgrads des Nativer-Code-Segments (i) Bestimmen, dass das Nativer-Code-Segment einen hohen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass Schleifen in dem Nativer-Code-Segment existieren, und (ii) Bestimmen, dass das Nativer-Code-Segment einen niedrigen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass Schleifen in dem Nativer-Code-Segment nicht existieren, umfasst.
  • Beispiel 23 umfasst den Gegenstand eines der Beispiele 17-22 und umfasst ferner das Bestimmen durch die Rechenvorrichtung, ob mindestens eines von einem indirekten Kontrollfluss und einem nicht identifizierten Opcode in dem Nativer-Code-Segment existiert; und wobei das Bestimmen des Komplexitätsgrads des Nativer-Code-Segments (i) Bestimmen, dass das Nativer-Code-Segment einen hohen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass mindestens eines von einem indirekten Kontrollfluss und einem nicht identifizierten Opcode in dem Nativer-Code-Segment existiert, und (ii) Bestimmen, dass das Nativer-Code-Segment einen niedrigen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass keines von einem indirekten Kontrollfluss und einem nicht identifizierten Opcode in dem Nativer-Code-Segment existiert, umfasst.
  • Beispiel 24 umfasst den Gegenstand eines der Beispiele 17-23 und umfasst ferner das Erzeugen durch die Rechenvorrichtung eines Komplexitätsanzeigers, der den bestimmten Komplexitätsgrad anzeigt.
  • Beispiel 25 umfasst den Gegenstand eines der Beispiele 17-24 und umfasst ferner das Identifizieren durch die Rechenvorrichtung, ob der Komplexitätsanzeiger einen niedrigen Komplexitätsgrad oder einen hohen Komplexitätsgrad anzeigt; und das Bestimmen des Status des Threads umfasst ferner (i) das Beibehalten des Status des Threads zum Anzeigen, dass das Nativer-Code-Segment als verwalteter Code auszuführen ist, als Reaktion auf eine Bestimmung, dass der Komplexitätsanzeiger einen niedrigen Komplexitätsgrad anzeigt, und (ii) das Setzen des Status des Threads zum Anzeigen, dass das Nativer-Code-Segment als nativer Code auszuführen ist, als Reaktion auf eine Bestimmung, dass der Komplexitätsanzeiger einen hohen Komplexitätsgrad anzeigt.
  • Beispiel 26 umfasst den Gegenstand eines der Beispiele 17-25 und wobei der Komplexitätsanzeiger in Verbindung mit dem Nativer-Code-Segment gespeichert wird, wobei das Verfahren ferner das Abrufen durch die Rechenvorrichtung des Komplexitätsanzeigers; das Abrufen durch die Rechenvorrichtung eines in Verbindung mit dem Nativer-Code-Segment gespeicherten ersten Hash-Werts; und das Vergleichen durch die Rechenvorrichtung des ersten Hash-Werts mit einem zu dem Nativer-Code-Segment zugehörigen zweiten Hash-Wert als Reaktion auf den Aufruf zum Ausführen des Nativer-Code-Segments, um zu bestimmen, ob sich das Nativer-Code-Segment seit dem Speichern des Komplexitätsanzeigers geändert hat, umfasst.
  • Beispiel 27 umfasst den Gegenstand eines der Beispiele 17-26 und umfasst ferner das Bestimmen durch die Rechenvorrichtung einer Startadresse des Nativer-Code-Segments; und das Erstellen durch die Rechenvorrichtung mindestens eines Teilkontrollflussgraphen, der mit einer nativen Anweisung an dem Ort der Startadresse des Nativer-Code-Segments beginnt.
  • Beispiel 28 umfasst den Gegenstand eines der Beispiele 17-27 und umfasst ferner das Erfassen durch die Rechenvorrichtung, ob ein Rückgabebefehl in dem Nativer-Code-Segment vorhanden ist; und das Beenden durch die Rechenvorrichtung des Teilkontrollflussgraphen als Reaktion auf ein Erfassen eines Rückgabebefehls in dem Nativer-Code-Segment.
  • Beispiel 29 umfasst den Gegenstand eines der Beispiele 17-28 und umfasst ferner das Erfassen durch die Rechenvorrichtung, ob ein nicht identifizierter Opcode in dem Nativer-Code-Segment vorhanden ist; und das Beenden durch die Rechenvorrichtung des Teilkontrollflussgraphen als Reaktion auf ein Erfassen eines nicht identifizierten Opcodes in dem Nativer-Code-Segment.
  • Beispiel 30 umfasst den Gegenstand eines der Beispiele 17-29 und umfasst ferner das Erfassen durch die Rechenvorrichtung, ob ein indirekter Kontrollfluss in dem Nativer-Code-Segment vorhanden ist; und das Beenden durch die Rechenvorrichtung des Teilkontrollflussgraphen als Reaktion auf ein Erfassen eines indirekten Kontrollflusses in dem Nativer-Code-Segment.
  • Beispiel 31 umfasst den Gegenstand eines der Beispiele 17-30 und wobei der Teilkontrollflussgraph ein erster Teilkontrollflussgraph ist, wobei das Verfahren ferner das Erfassen durch die Rechenvorrichtung, ob ein geschachtelter Funktionsaufruf in dem Nativer-Code-Segment vorhanden ist; und das Erstellen durch die Rechenvorrichtung eines zweiten Teilkontrollflussgraphen basierend auf einem geschachtelten Funktionsaufruf als Reaktion auf ein Erfassen des geschachtelten Funktionsaufrufs in dem Nativer-Code-Segment umfasst.
  • Beispiel 32 umfasst den Gegenstand eines der Beispiele 17-31 und wobei das Durchführen der binären Analyse ferner das Durchführen der binären Analyse des Nativer-Code-Segments während eines vorzeitigen Kompilierungsvorgangs umfasst.
  • Beispiel 33 umfasst ein oder mehrere computerlesbare Speichermedien, die eine Vielzahl von Anweisungen aufweisen, die bei Ausführung bewirken, dass eine Rechenvorrichtung das Verfahren eines der Beispiele 17-32 ausführt.
  • Beispiel 34 umfasst eine Rechenvorrichtung zum Aufrufen nativen Codes aus verwaltetem Code unter Verwendung binärer Analyse, wobei die Rechenvorrichtung eine Einrichtung zum Empfangen eines Aufrufs zum Ausführen eines Nativer-Code-Segments von einem Thread, der zum Ausführen eines Verwalteter-Code-Segments ausgebildet ist; eine Einrichtung zum Durchführen einer binären Analyse des Nativer-Code-Segments; eine Einrichtung zum Bestimmen eines Komplexitätsgrads des Nativer-Code-Segments auf Grundlage der binären Analyse; eine Einrichtung zum Bestimmen eines Status des Threads auf Grundlage des bestimmten Komplexitätsgrads; und eine Einrichtung zum Ausführen des Nativer-Code-Segments auf Grundlage des Status des Threads, wobei der Status des Threads anzeigt, ob das Nativer-Code-Segment als ein natives oder ein Verwalteter-Code-Segment auszuführen ist, umfasst.
  • Beispiel 35 umfasst den Gegenstand von Beispiel 34 und umfasst ferner eine Einrichtung zum Bestimmen, ob das Nativer-Code-Segment eine Registrierung erfordert; und eine Einrichtung zum Durchführen der binären Analyse als Reaktion auf eine Bestimmung, dass das Nativer-Code-Segment eine Registrierung erfordert.
  • Beispiel 36 umfasst den Gegenstand eines der Beispiele 34 und 35 und umfasst ferner eine Einrichtung zum Laden des Nativer-Code-Segments aus einer gemeinsamen Bibliothek.
  • Beispiel 37 umfasst den Gegenstand eines der Beispiele 34-36 und umfasst ferner eine Einrichtung zum Abbilden des Nativer-Code-Segments auf einen mit dem Thread verbundenen Speicherbereich.
  • Beispiel 38 umfasst den Gegenstand eines der Beispiele 34-37 und umfasst ferner eine Einrichtung zum Bestimmen einer Anzahl von Anweisungen in dem Nativer-Code-Segment; und eine Einrichtung zum Bestimmen, ob die Anzahl von Anweisungen einer vordefinierten Grenzanzahl von Anweisungen genügt, und wobei die Einrichtung zum Bestimmen des Komplexitätsgrads des Nativer-Code-Segments eine Einrichtung zum Bestimmen, dass das Nativer-Code-Segment einen hohen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass die Anzahl von Anweisungen der vordefinierten Grenzanzahl von Anweisungen genügt; und eine Einrichtung zum Bestimmen, dass das Nativer-Code-Segment einen niedrigen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass die Anzahl von Anweisungen nicht der vordefinierten Grenzanzahl von Anweisungen genügt, umfasst.
  • Beispiel 39 umfasst den Gegenstand eines der Beispiele 34-38 und umfasst ferner eine Einrichtung zum Bestimmen, ob Schleifen in dem Nativer-Code-Segment existieren; und wobei die Einrichtung zum Bestimmen des Komplexitätsgrads des Nativer-Code-Segments eine Einrichtung zum Bestimmen, dass das Nativer-Code-Segment einen hohen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass Schleifen in dem Nativer-Code-Segment existieren; und eine Einrichtung zum Bestimmen, dass das Nativer-Code-Segment einen niedrigen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass Schleifen in dem Nativer-Code-Segment nicht existieren, umfasst.
  • Beispiel 40 umfasst den Gegenstand eines der Beispiele 34-39 und umfasst ferner eine Einrichtung zum Bestimmen, ob mindestens eines von einem indirekten Kontrollfluss und einem nicht identifizierten Opcode in dem Nativer-Code-Segment existiert; und wobei die Einrichtung zum Bestimmen des Komplexitätsgrads des Nativer-Code-Segments eine Einrichtung zum Bestimmen, dass das Nativer-Code-Segment einen hohen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass mindestens eines von einem indirekten Kontrollfluss und einem nicht identifizierten Opcode in dem Nativer-Code-Segment existiert; und eine Einrichtung zum Bestimmen, dass das Nativer-Code-Segment einen niedrigen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass keines von einem indirekten Kontrollfluss und einem nicht identifizierten Opcode in dem Nativer-Code-Segment existiert, umfasst.
  • Beispiel 41 umfasst den Gegenstand eines der Beispiele 34-40 und umfasst ferner eine Einrichtung zum Erzeugen eines Komplexitätsanzeigers, der den bestimmten Komplexitätsgrad anzeigt.
  • Beispiel 42 umfasst den Gegenstand eines der Beispiele 34-41 und umfasst ferner eine Einrichtung zum Identifizieren, ob der Komplexitätsanzeiger einen niedrigen Komplexitätsgrad oder einen hohen Komplexitätsgrad anzeigt; und wobei die Einrichtung zum Bestimmen des Status des Threads ferner eine Einrichtung zum Beibehalten des Status des Threads zum Anzeigen, dass das Nativer-Code-Segment als verwalteter Code auszuführen ist, als Reaktion auf eine Bestimmung, dass der Komplexitätsanzeiger einen niedrigen Komplexitätsgrad anzeigt; und eine Einrichtung zum Setzen des Status des Threads zum Anzeigen, dass das Nativer-Code-Segment als nativer Code auszuführen ist, als Reaktion auf eine Bestimmung, dass der Komplexitätsanzeiger einen hohen Komplexitätsgrad anzeigt, umfasst.
  • Beispiel 43 umfasst den Gegenstand eines der Beispiele 34-42 und wobei der Komplexitätsanzeiger in Verbindung mit dem Nativer-Code-Segment gespeichert wird, wobei die Rechenvorrichtung ferner eine Einrichtung zum Abrufen des Komplexitätsanzeigers; eine Einrichtung zum Abrufen eines in Verbindung mit dem Nativer-Code-Segment gespeicherten ersten Hash-Werts; und eine Einrichtung zum Vergleichen des ersten Hash-Werts mit einem zu dem Nativer-Code-Segment zugehörigen zweiten Hash-Wert als Reaktion auf den Aufruf zum Ausführen des Nativer-Code-Segments, um zu bestimmen, ob sich das Nativer-Code-Segment seit dem Speichern des Komplexitätsanzeigers geändert hat, umfasst.
  • Beispiel 44 umfasst den Gegenstand eines der Beispiele 34-43 und umfasst ferner eine Einrichtung zum Bestimmen einer Startadresse des Nativer-Code-Segments; und eine Einrichtung zum Erstellen mindestens eines Teilkontrollflussgraphen, der mit einer nativen Anweisung an dem Ort der Startadresse des Nativer-Code-Segments beginnt.
  • Beispiel 45 umfasst den Gegenstand eines der Beispiele 34-44 und umfasst ferner eine Einrichtung zum Erfassen, ob ein Rückgabebefehl in dem Nativer-Code-Segment vorhanden ist; und eine Einrichtung zum Beenden des Teilkontrollflussgraphen als Reaktion auf ein Erfassen eines Rückgabebefehls in dem Nativer-Code-Segment.
  • Beispiel 46 umfasst den Gegenstand eines der Beispiele 34-45 und umfasst ferner eine Einrichtung zum Erfassen, ob ein nicht identifizierter Opcode in dem Nativer-Code-Segment vorhanden ist; und eine Einrichtung zum Beenden des Teilkontrollflussgraphen als Reaktion auf ein Erfassen eines nicht identifizierten Opcodes in dem Nativer-Code-Segment.
  • Beispiel 47 umfasst den Gegenstand eines der Beispiele 34-46 und umfasst ferner eine Einrichtung zum Erfassen, ob ein indirekter Kontrollfluss in dem Nativer-Code-Segment vorhanden ist; und eine Einrichtung zum Beenden des Teilkontrollflussgraphen als Reaktion auf ein Erfassen eines indirekten Kontrollflusses in dem Nativer-Code-Segment.
  • Beispiel 48 umfasst den Gegenstand eines der Beispiele 34-47 und wobei der Teilkontrollflussgraph ein erster Teilkontrollflussgraph ist, wobei die Rechenvorrichtung ferner eine Einrichtung zum Erfassen, ob ein geschachtelter Funktionsaufruf in dem Nativer-Code-Segment vorhanden ist; und eine Einrichtung zum Erstellen eines zweiten Teilkontrollflussgraphen basierend auf einem geschachtelten Funktionsaufruf als Reaktion auf ein Erfassen des geschachtelten Funktionsaufrufs in dem Nativer-Code-Segment umfasst.
  • Beispiel 49 umfasst den Gegenstand eines der Beispiele 34-48 und wobei die Einrichtung zum Durchführen der binären Analyse eine Einrichtung zum Durchführen der binären Analyse des Nativer-Code-Segments während eines vorzeitigen Kompilierungsvorgangs umfasst.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • US 14/998274 [0001]

Claims (25)

  1. Rechenvorrichtung zum Aufrufen nativen Codes aus verwaltetem Code unter Verwendung binärer Analyse, wobei die Rechenvorrichtung aufweist: ein Modul für Initiierung nativen Codes zum Empfangen eines Aufrufs zum Ausführen eines Nativer-Code-Segments von einem Thread, der zum Ausführen eines Verwalteter-Code-Segments ausgebildet ist; ein Modul für binäre Analyse zum (i) Durchführen einer binären Analyse des Nativer-Code-Segments und (ii) Bestimmen eines Komplexitätsgrads des Nativer-Code-Segments auf Grundlage der binären Analyse; und ein Modul für Ausführung nativen Codes zum Bestimmen eines Status des Threads auf Grundlage des bestimmten Komplexitätsgrads und Ausführen des Nativer-Code-Segments auf Grundlage des Status des Threads, wobei der Status des Threads anzeigt, ob das Nativer-Code-Segment als ein natives oder ein Verwalteter-Code-Segment auszuführen ist.
  2. Rechenvorrichtung nach Anspruch 1, wobei das Modul für Initiierung nativen Codes ferner ausgebildet ist zum: Bestimmen, ob das Nativer-Code-Segment eine Registrierung erfordert; und Übertragen des Nativer-Code-Segments an das Modul für binäre Analyse als Reaktion auf eine Bestimmung, dass das Nativer-Code-Segment eine Registrierung erfordert.
  3. Rechenvorrichtung nach Anspruch 1, wobei das Modul für Initiierung nativen Codes ferner dazu ausgebildet ist, das Nativer-Code-Segment aus einer gemeinsamen Bibliothek zu laden.
  4. Rechenvorrichtung nach Anspruch 1, wobei das Modul für binäre Analyse ferner dazu ausgebildet ist, das Nativer-Code-Segment auf einen mit dem Thread verbundenen Speicherbereich abzubilden.
  5. Rechenvorrichtung nach Anspruch 1, wobei das Modul für binäre Analyse ferner ausgebildet ist zum: Bestimmen einer Anzahl von Anweisungen in dem Nativer-Code-Segment; und Bestimmen, ob die Anzahl von Anweisungen einer vordefinierten Grenzanzahl von Anweisungen genügt; wobei das Bestimmen des Komplexitätsgrads des Nativer-Code-Segments (i) Bestimmen, dass das Nativer-Code-Segment einen hohen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass die Anzahl von Anweisungen der vordefinierten Grenzanzahl von Anweisungen genügt, und (ii) Bestimmen, dass das Nativer-Code-Segment einen niedrigen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass die Anzahl von Anweisungen nicht der vordefinierten Grenzanzahl von Anweisungen genügt, umfasst.
  6. Rechenvorrichtung nach Anspruch 1, wobei das Modul für binäre Analyse ferner ausgebildet ist zum: Bestimmen, ob Schleifen in dem Nativer-Code-Segment existieren; wobei das Bestimmen des Komplexitätsgrads des Nativer-Code-Segments (i) Bestimmen, dass das Nativer-Code-Segment einen hohen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass Schleifen in dem Nativer-Code-Segment existieren, und (ii) Bestimmen, dass das Nativer-Code-Segment einen niedrigen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass Schleifen in dem Nativer-Code-Segment nicht existieren, umfasst.
  7. Rechenvorrichtung nach Anspruch 1, wobei das Modul für binäre Analyse ferner ausgebildet ist zum: Bestimmen, ob mindestens eines von einem indirekten Kontrollfluss und einem nicht identifizierten Opcode in dem Nativer-Code-Segment existiert; wobei das Bestimmen des Komplexitätsgrads des Nativer-Code-Segments (i) Bestimmen, dass das Nativer-Code-Segment einen hohen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass mindestens eines von einem indirekten Kontrollfluss und einem nicht identifizierten Opcode in dem Nativer-Code-Segment existiert, und (ii) Bestimmen, dass das Nativer-Code-Segment einen niedrigen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass keines von einem indirekten Kontrollfluss und einem nicht identifizierten Opcode in dem Nativer-Code-Segment existiert, umfasst.
  8. Rechenvorrichtung nach Anspruch 1, wobei das Modul für binäre Analyse ferner dazu ausgebildet ist, einen Komplexitätsanzeiger zu erzeugen, der den bestimmten Komplexitätsgrad anzeigt.
  9. Rechenvorrichtung nach Anspruch 8, wobei das Modul für Ausführung nativen Codes ferner ausgebildet ist zum: Identifizieren, ob der Komplexitätsanzeiger einen niedrigen Komplexitätsgrad oder einen hohen Komplexitätsgrad anzeigt; Beibehalten des Status des Threads zum Anzeigen, dass das Nativer-Code-Segment als verwalteter Code auszuführen ist, als Reaktion auf eine Bestimmung, dass der Komplexitätsanzeiger einen niedrigen Komplexitätsgrad anzeigt; Setzen des Status des Threads zum Anzeigen, dass das Nativer-Code-Segment als nativer Code auszuführen ist, als Reaktion auf eine Bestimmung, dass der Komplexitätsanzeiger einen hohen Komplexitätsgrad anzeigt.
  10. Rechenvorrichtung nach Anspruch 8, wobei der Komplexitätsanzeiger in Verbindung mit dem Nativer-Code-Segment gespeichert wird und das Modul für Initiierung nativen Codes ferner ausgebildet ist zum: Abrufen des Komplexitätsanzeigers; Abrufen eines in Verbindung mit dem Nativer-Code-Segment gespeicherten ersten Hash-Werts; und Vergleichen des ersten Hash-Werts mit einem zu dem Nativer-Code-Segment zugehörigen zweiten Hash-Wert als Reaktion auf den Aufruf zum Ausführen des Nativer-Code-Segments, um zu bestimmen, ob sich das Nativer-Code-Segment seit dem Speichern des Komplexitätsanzeigers geändert hat.
  11. Rechenvorrichtung nach Anspruch 1, wobei das Modul für binäre Analyse ferner ausgebildet ist zum: Bestimmen einer Startadresse des Nativer-Code-Segments; und Erstellen mindestens eines Teilkontrollflussgraphen, der mit einer nativen Anweisung an dem Ort der Startadresse des Nativer-Code-Segments beginnt.
  12. Rechenvorrichtung nach Anspruch 11, wobei der Teilkontrollflussgraph ein erster Teilkontrollflussgraph ist, wobei das Modul für binäre Analyse ferner ausgebildet ist zum: Erfassen, ob ein geschachtelter Funktionsaufruf in dem Nativer-Code-Segment vorhanden ist; und Erstellen eines zweiten Teilkontrollflussgraphen basierend auf einem geschachtelten Funktionsaufruf als Reaktion auf ein Erfassen des geschachtelten Funktionsaufrufs in dem Nativer-Code-Segment.
  13. Verfahren zum Aufrufen nativen Codes aus verwaltetem Code unter Verwendung binärer Analyse, wobei das Verfahren beinhaltet: das Empfangen durch eine Rechenvorrichtung eines Aufrufs zum Ausführen eines Nativer-Code-Segments von einem Thread, der zum Ausführen eines Verwalteter-Code-Segments ausgebildet ist; das Durchführen durch die Rechenvorrichtung einer binären Analyse des Nativer-Code-Segments; das Bestimmen durch die Rechenvorrichtung eines Komplexitätsgrads des Nativer-Code-Segments auf Grundlage der binären Analyse; das Bestimmen durch die Rechenvorrichtung eines Status des Threads auf Grundlage des bestimmten Komplexitätsgrads; und das Ausführen durch die Rechenvorrichtung des Nativer-Code-Segments auf Grundlage des Status des Threads, wobei der Status des Threads anzeigt, ob das Nativer-Code-Segment als ein Nativer- oder ein Verwalteter-Code-Segment auszuführen ist.
  14. Verfahren nach Anspruch 13, das ferner beinhaltet: das Bestimmen durch die Rechenvorrichtung, ob das Nativer-Code-Segment eine Registrierung erfordert; und das Durchführen durch die Rechenvorrichtung der binären Analyse als Reaktion auf eine Bestimmung, dass das Nativer-Code-Segment eine Registrierung erfordert.
  15. Verfahren nach Anspruch 13, das ferner das Laden durch die Rechenvorrichtung des Nativer-Code-Segments aus einer gemeinsamen Bibliothek beinhaltet.
  16. Verfahren nach Anspruch 13, das ferner das Abbilden durch die Rechenvorrichtung des Nativer-Code-Segments auf einen mit dem Thread verbundenen Speicherbereich beinhaltet.
  17. Verfahren nach Anspruch 13, das ferner beinhaltet: das Bestimmen durch die Rechenvorrichtung einer Anzahl von Anweisungen in dem Nativer-Code-Segment; und das Bestimmen durch die Rechenvorrichtung, ob die Anzahl von Anweisungen einer vordefinierten Grenzanzahl von Anweisungen genügt; und wobei das Bestimmen des Komplexitätsgrads des Nativer-Code-Segments (i) Bestimmen, dass das Nativer-Code-Segment einen hohen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass die Anzahl von Anweisungen der vordefinierten Grenzanzahl von Anweisungen genügt, und (ii) Bestimmen, dass das Nativer-Code-Segment einen niedrigen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass die Anzahl von Anweisungen nicht der vordefinierten Grenzanzahl von Anweisungen genügt, umfasst.
  18. Verfahren nach Anspruch 13, das ferner beinhaltet: das Bestimmen durch die Rechenvorrichtung, ob Schleifen in dem Nativer-Code-Segment existieren; und wobei das Bestimmen des Komplexitätsgrads des Nativer-Code-Segments (i) Bestimmen, dass das Nativer-Code-Segment einen hohen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass Schleifen in dem Nativer-Code-Segment existieren, und (ii) Bestimmen, dass das Nativer-Code-Segment einen niedrigen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass Schleifen in dem Nativer-Code-Segment nicht existieren, umfasst.
  19. Verfahren nach Anspruch 13, das ferner beinhaltet: das Bestimmen durch die Rechenvorrichtung, ob mindestens eines von einem indirekten Kontrollfluss und einem nicht identifizierten Opcode in dem Nativer-Code-Segment existiert; und wobei das Bestimmen des Komplexitätsgrads des Nativer-Code-Segments (i) Bestimmen, dass das Nativer-Code-Segment einen hohen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass mindestens eines von einem indirekten Kontrollfluss und einem nicht identifizierten Opcode in dem Nativer-Code-Segment existiert, und (ii) Bestimmen, dass das Nativer-Code-Segment einen niedrigen Komplexitätsgrad hat, als Reaktion auf eine Bestimmung, dass keines von einem indirekten Kontrollfluss und einem nicht identifizierten Opcode in dem Nativer-Code-Segment existiert, umfasst.
  20. Verfahren nach Anspruch 13, das ferner das Erzeugen durch die Rechenvorrichtung eines Komplexitätsanzeigers, der den bestimmten Komplexitätsgrad anzeigt, beinhaltet.
  21. Verfahren nach Anspruch 20, das ferner beinhaltet: das Identifizieren durch die Rechenvorrichtung, ob der Komplexitätsanzeiger einen niedrigen Komplexitätsgrad oder einen hohen Komplexitätsgrad anzeigt; und wobei das Bestimmen des Status des Threads ferner (i) das Beibehalten des Status des Threads zum Anzeigen, dass das Nativer-Code-Segment als verwalteter Code auszuführen ist, als Reaktion auf eine Bestimmung, dass der Komplexitätsanzeiger einen niedrigen Komplexitätsgrad anzeigt, und (ii) das Setzen des Status des Threads zum Anzeigen, dass das Nativer-Code-Segment als nativer Code auszuführen ist, als Reaktion auf eine Bestimmung, dass der Komplexitätsanzeiger einen hohen Komplexitätsgrad anzeigt, umfasst.
  22. Verfahren nach Anspruch 20, wobei der Komplexitätsanzeiger in Verbindung mit dem Nativer-Code-Segment gespeichert wird, wobei das Verfahren ferner beinhaltet: das Abrufen durch die Rechenvorrichtung des Komplexitätsanzeigers; das Abrufen durch die Rechenvorrichtung eines in Verbindung mit dem Nativer-Code-Segment gespeicherten ersten Hash-Werts; und das Vergleichen durch die Rechenvorrichtung des ersten Hash-Werts mit einem zu dem Nativer-Code-Segment zugehörigen zweiten Hash-Wert als Reaktion auf den Aufruf zum Ausführen des Nativer-Code-Segments, um zu bestimmen, ob sich das Nativer-Code-Segment seit dem Speichern des Komplexitätsanzeigers geändert hat.
  23. Verfahren nach Anspruch 13, das ferner beinhaltet: das Bestimmen durch die Rechenvorrichtung einer Startadresse des Nativer-Code-Segments; und das Erstellen durch die Rechenvorrichtung mindestens eines Teilkontrollflussgraphen, der mit einer nativen Anweisung an dem Ort der Startadresse des Nativer-Code-Segments beginnt.
  24. Computerlesbares Speichermedium oder mehrere computerlesbare Speichermedien, die eine Vielzahl von Anweisungen aufweisen, die bei Ausführung bewirken, dass eine Rechenvorrichtung das Verfahren nach einem der Ansprüche 13-23 ausführt.
  25. Rechenvorrichtung zum Aufrufen nativen Codes aus verwaltetem Code unter Verwendung binärer Analyse, wobei die Rechenvorrichtung eine Einrichtung zum Ausführen des Verfahrens nach einem der Ansprüche 13-23 aufweist.
DE112016006060.2T 2015-12-26 2016-11-23 Technologien zum Aufruf von nativem Code unter Verwendung binärer Analyse Withdrawn DE112016006060T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/998,274 2015-12-26
US14/998,274 US9910646B2 (en) 2015-12-26 2015-12-26 Technologies for native code invocation using binary analysis
PCT/US2016/063572 WO2017112292A2 (en) 2015-12-26 2016-11-23 Technologies for native code invocation using binary analysis

Publications (1)

Publication Number Publication Date
DE112016006060T5 true DE112016006060T5 (de) 2018-09-06

Family

ID=59087127

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112016006060.2T Withdrawn DE112016006060T5 (de) 2015-12-26 2016-11-23 Technologien zum Aufruf von nativem Code unter Verwendung binärer Analyse

Country Status (5)

Country Link
US (1) US9910646B2 (de)
JP (1) JP2017117451A (de)
CN (1) CN107025109A (de)
DE (1) DE112016006060T5 (de)
WO (1) WO2017112292A2 (de)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2391635B1 (de) 2009-01-28 2017-04-26 Epimmune Inc. Pan-dr-bindende polypeptide und verwendungen davon
US10157466B2 (en) * 2016-01-21 2018-12-18 Riverside Research Institute Method for automatic tissue segmentation of medical images
US10761841B2 (en) 2018-10-17 2020-09-01 Denso International America, Inc. Systems and methods for identifying source code from binaries using machine learning
US10938742B1 (en) 2020-01-31 2021-03-02 Bank Of America Corporation Multiplexed resource allocation architecture

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6226789B1 (en) * 1996-01-29 2001-05-01 Compaq Computer Corporation Method and apparatus for data flow analysis
US7051322B2 (en) * 2002-12-06 2006-05-23 @Stake, Inc. Software analysis framework
US7475394B2 (en) * 2003-12-05 2009-01-06 Arm Limited System and method of analyzing interpreted programs
JP4996859B2 (ja) * 2006-02-10 2012-08-08 ソニーケミカル&インフォメーションデバイス株式会社 圧着装置
WO2008002173A1 (en) * 2006-06-20 2008-01-03 Intel Corporation Method and apparatus to call native code from a managed code application
US8627287B2 (en) 2007-11-29 2014-01-07 Microsoft Corporation Prioritizing quality improvements to source code
US8136158B1 (en) * 2008-07-21 2012-03-13 Google Inc. User-level segmentation mechanism that facilitates safely executing untrusted native code
US9250938B2 (en) * 2008-10-15 2016-02-02 Microsoft Technology Licensing, Llc Caching runtime generated code
CN101826004A (zh) * 2009-03-02 2010-09-08 上海科泰世纪科技有限公司 Applet托管函数的方法
US8819399B1 (en) 2009-07-31 2014-08-26 Google Inc. Predicated control flow and store instructions for native code module security
US8522227B2 (en) 2009-08-24 2013-08-27 Microsoft Corporation Runtime activation and version selection
US8365156B2 (en) * 2010-04-17 2013-01-29 Microsoft Corporation Intermediate language support for change resilience
US8375373B2 (en) * 2010-04-19 2013-02-12 Microsoft Corporation Intermediate language support for change resilience
US8683462B2 (en) 2010-10-22 2014-03-25 Adobe Systems Incorporated Handling calls to native code in a managed code environment
AU2014348812B2 (en) 2013-11-12 2019-09-26 RunSafe Security, Inc. Improved control flow integrity system and method
CN104239055A (zh) * 2014-09-15 2014-12-24 大连楼兰科技股份有限公司 检测软件代码复杂度的方法
CN104657149A (zh) * 2015-03-13 2015-05-27 浪潮集团有限公司 一种存储系统的管理模块的软件框架实现方法

Also Published As

Publication number Publication date
US20170185386A1 (en) 2017-06-29
CN107025109A (zh) 2017-08-08
US9910646B2 (en) 2018-03-06
JP2017117451A (ja) 2017-06-29
WO2017112292A2 (en) 2017-06-29
WO2017112292A3 (en) 2017-07-27

Similar Documents

Publication Publication Date Title
DE112012004747B4 (de) Verborgenes automatisiertes Spiegeln von Daten für native Schnittstellen in verteilten virtuellen Maschinen
DE112016006060T5 (de) Technologien zum Aufruf von nativem Code unter Verwendung binärer Analyse
DE102010051477B4 (de) Verfahren in einer computerplattform sowie computerplattform zum gemeinsamen benutzen von virtuellen speicherbasierten mehrversionsdaten zwischen den verschiedenartigen prozessoren der computerplattform
DE102007025397B4 (de) System mit mehreren Prozessoren und Verfahren zu seinem Betrieb
DE112016005536T5 (de) Bestimmen von reihenfolgen einer ausführung eines neuronalen netzes
DE60317654T2 (de) Verfahren und vorrichtung zur veränderung eines kernmodules, um es auf mehreren kernversionen lauffähig zu machen
DE102015102678A1 (de) Startabbild- discovery und -bereitstellung
DE112011100739T5 (de) Programmatisches Ermitteln eines Ausführungsmodus für eine Anforderungszuteilungunter Verwendung von historischen Masszahlen
DE102020115253A1 (de) Verfahren und einrichtung zum ausführen eines applets
DE102013207049A1 (de) Überwachen der Datenstrompufferung zur Optimierung der Operatorverarbeitung
DE112013000656T5 (de) System und Verfahren zum Verringern der Speichernutzung durch optimales Platzieren von virtuellen Maschinen in einem virtualisierten Rechenzentrum
DE102018213549A1 (de) Verfahren und vorrichtungen zum breitstellen von zugriffsautorisierung auf benutzerebene für cloud-basierte feldprogrammierbare gate-arrays
CN111143143B (zh) 一种性能测试方法及装置
DE112013000904T5 (de) Durchführen von Aktualisierungen von Quellcode, der auf einer Vielzahl von Rechenknoten ausgeführt wird
DE112017001800T5 (de) Technologien für dynamisches arbeitswarteschlangenmanagement
DE102020105939A1 (de) Enhanced-Serial-Peripheral-Interface-(eSPI)-Signalisierung zurAbsturzereignisbenachrichtigung
DE112014000340T5 (de) Vorablesezugriff auf Daten für einen Chip mit einem übergeordneten Kern und einem Scout-Kern
DE102016119738A1 (de) Selektives Laden von Komponenten in einem Knoten zum Beschleunigen von Wartungsmaßnahmen
DE112015007104T5 (de) Datenverarbeitungsvorrichtung, Datenverarbeitungsverfahren und Datenverarbeitungsprogramm
DE112013007083T5 (de) Programmanalysevorrichtung, Programmanalyseverfahren und Programmanalyseprogramm
DE4223454A1 (de) Datenuebertragungssystem fuer eine digitale signalverarbeitungsvorrichtung
DE102006026474A1 (de) System und Verfahren für das automatische Optimieren von erhältlichen virtuellem Speicher
DE102018214541A1 (de) Verfahren und vorrichtung zum abbilden von single-static-assignment-anweisungen auf einen datenflussgraphen in einer datenflussarchitektur
DE112014001815T5 (de) Eingebetteter Speicher mit Managementschema für Echtzeit-Applikationen
DE102019135079A1 (de) Installation von firmware-bundles abbrechen

Legal Events

Date Code Title Description
R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee