DE102009004276A1 - Byte Coat: Nativer Bytcode Compiler für die Programmiersprache Python - Google Patents
Byte Coat: Nativer Bytcode Compiler für die Programmiersprache Python Download PDFInfo
- Publication number
- DE102009004276A1 DE102009004276A1 DE200910004276 DE102009004276A DE102009004276A1 DE 102009004276 A1 DE102009004276 A1 DE 102009004276A1 DE 200910004276 DE200910004276 DE 200910004276 DE 102009004276 A DE102009004276 A DE 102009004276A DE 102009004276 A1 DE102009004276 A1 DE 102009004276A1
- Authority
- DE
- Germany
- Prior art keywords
- python
- compilation
- source code
- resulted
- byte 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.)
- Withdrawn
Links
Classifications
-
- 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/52—Binary to binary
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
Verfahren zur Erzeugung von Kompilaten aus plattformunabhängigem Python Bytecode, dadurch gekennzeichnet, daß nativ kompilierte, d. h. plattformabhängige, dynamische Bibliotheken entstehen.
Description
- Die Erfindung betrifft ein Verfahren entsprechend dem Oberbegriff des Anspruchs 1.
- Die Programmiersprache Python erfreut sich zunehmender Beliebtheit. Dabei kommen ihr vor allem ihre dynamische Typisierung, übersichtlicher Aufbau und umfassende Standard-Bibliothek zu Gute. Ein wiederkehrendes Problem ist die Weitergabe von Python Software. In vielen Fällen ist die Weitergabe des Quellcodes möglich und bei Open Source Projekten sogar beabsichtigt. Für kommerzielle Software kommt dies jedoch nicht in Frage. Die Weitergabe des kompilierten Bytecodes erscheint hier als eine ideale Lösung, da die .pyc Dateien für den Interpreter völlig transparent zum Quellcode-Modul verwendet werden können. Mit Hilfe kommerzieller Dienste wie decompyle kann jedoch aus Python Bytecode wieder der originale Quellcode hergestellt werden.
- Da die Weitergabe von Python Quell- oder Bytecode die fertige Installation eines Python Interpreters auf der Zielplattform voraussetzt, wurden Tools entwickelt, die den Interpreter zusammen mit allen benötigten Modulen zusammen in eine einzelne ausführbare Datei packen. Für den Nutzer erscheint die Software dann wie gewünscht als eine „anzuklickende” Applikation. Da jedoch der Bytecode weiterhin in der ausführbaren Applikation enthalten ist, kann ebenso wie im vorangegangenen Abschnitt beschrieben der Quellcode extrahiert werden.
- Eine weitere Möglichkeit, den Quellcode vor dem Nutzer zu verbergen, ist die direkte Übersetzung in eine nicht dekompilierbare Sprache wie C oder C++. Verschiedene Projekte wie PyPy oder Pyrex erreichen mit diesem Ansatz unter anderem deutliche Geschwindigkeitsverbesserungen gegenüber der Interpretation von Python Quellcode. Jedoch lassen sich dabei nicht alle Möglichkeiten, die die Sprache Python bietet, ausschöpfen. Der Umfang der erlaubten Konstrukte ist auf diejenigen beschränkt, die sich auch in einer statischen Programmiersprache abbilden lassen.
- Vor dem Hintergrund dieser Probleme, haben wir eine Methodik entwickelt, die Python Bytecode Module automatisch in die Programmiersprache C Module übersetzt. Diese können dann jeweils in dynamisch gelinkte Bibliotheken kompiliert werden. Deren spezieller Aufbau versetzt den Python Interpreter in die Lage, sie transparent beim Importieren eines Moduls zu verwenden.
- Die Vorteile dieses Verfahrens sind eine ähnlich hohe Sicherheit der Module vor einer möglichen Quellcode Rückgewinnung, wie direkt in C geschriebene Module. Zum anderen besteht eine nahezu vollständige Kompatibilität zwischen originalem und übersetztem Modul. Einige wenige Einschränkungen sind jedoch vorhanden. So ist es beispielsweise nicht möglich, für übersetzte Python Funktionen den Bytecode zu extrahieren (import dis), worin allerdings auch die Absicht unserer Software besteht.
- Python Quellcode Module (Endung .py) werden vom Interpreter in ein Bytecode-Format kompiliert, welches dann Anweisung für Anweisung interpretiert wird. Zur späteren Benutzung wird der Bytecode eines Moduls in einer gleichnamigen .pyc Datei gespeichert (siehe
1 ). - Bei Weitergabe des kompilierten Bytecodes (Endung .pyc) kann der Interpreter diesen völlig transparent zum Quellcode Modul verwendet. Mit Hilfe kommerzieller Dienste wie decompyle kann jedoch aus Python Bytecode wieder der originale Quellcode hergestellt werden.
- Dieses Problem der faktischen Offenlegung des Quellcodes bei Weitergabe des Bytecodes durch das neuartige Verfahren eliminiert, ohne die Nachteile der weiter oben genannten Verfahren aufzuweisen.
- Üblicherweise werden Python Module vom CPython Interpreter in .pyc Bytecode Module übersetzt und danach von einem Bytecode Evaluator ausgeführt. Dieser ist auch in der CPython-Implementierung enthalten. Bei diesem Schritt werden viele der weiterführenden Konzepte von Python wie beispielsweise Klassen, Dekoratoren usw. auf ein einfacheres Stack Modell zurückgeführt.
-
- Eine Funktion a wird mittels des Moduls dis in seine Bytecode-Elemente zerlegt und entsprechend dargestellt. Dabei werden die beiden Argumente der Funktion mit dem Kommando LORD FAST auf den Stack gelegt. Der Befehl BINARY_ADD wiederum nimmt sich die beiden obersten Elemente des Stacks, addiert beide und legt das Ergebnis wieder auf den Stack. RETURN VALUE gibt den obersten Wert des Stack als Rückgabewert der gesamten Funktion zurück.
- Die Erfindung besteht in einer speziellen Kompilierung des Python Codes in eine andere Sprache wie beispielsweise C. Dieser Ansatz bietet die gleiche Sicherheit wie die direkte Erstellung von kompilierten C Objekt Dateien.
-
-
- Die aufeinander folgenden sich gegenseitig aufhebenden Stack Operationen können dabei entfernt werden, was eine deutliche Optimierung gegenüber regulär ausgeführtem Bytecode darstellt. Der eigentliche Vorteil dieser Methode liegt allerdings in der Tatsache, dass eine solchermaßen kompilierte C Funktion wenig Angriffsfläche für eine Rückgewinnung des ursprünglichen Python Quellcodes bietet. Es können jedoch alle Features der Python Sprache komplett und sehr flexibel unterstützt werden. Eine weitere Stärke liegt darin, dass der C Kompiler beim Übersetzen einer solchen Funktion große Freiheit in der Anwendung von Optimierungen hat. Dies Optimierungen bieten dann nicht nur einen Geschwindigkeitsvorteil, sondern auch weitere Sicherheit gegenüber einer Dekompilation.
- Das Verfahren entsprechend dieser Erfindung liest ein Python Modul im Bytecode ein und erstellt ein entsprechendes C Extension Modul, das genau dieselbe Funktionalität bietet, aber jedoch transparent gegen das ursprüngliche Python Modul austauschbar ist (siehe
2 ).
Claims (6)
- Verfahren zur Erzeugung von Kompilaten aus plattformunabhängigem Python Bytecode, dadurch gekennzeichnet, daß nativ kompilierte, d. h. plattformabhängige, dynamische Bibliotheken entstehen.
- Verfahren nach Anspruch 1, dadurch gekennzeichnet, daß die resultierenden Kompilate ohne den zugehörigen Quellcode ausgeliefert werden können.
- Verfahren nach Anspruch 1 oder 2, dadurch gekennzeichnet, daß die resultierenden Kompilate ohne den zugehörigen Bytecode ausgeliefert werden können.
- Verfahren nach einem der vorherigen Ansprüche, dadurch gekennzeichnet, daß die resultierenden Kompilate transparent in die bestehende Python Ausführungsumgebung eingebunden werden können, indem das zu schützende Python Modul durch die zugehörige dynamische Bibliothek ersetzt wird.
- Verfahren nach einem der vorherigen Ansprüche, dadurch gekennzeichnet, daß die resultierenden Kompilate die Rückgewinnung des zugrunde liegenden Python Quellcodes erschweren.
- Verfahren nach einem der vorherigen Ansprüche, dadurch gekennzeichnet, daß auf beliebige Plattformen, für die eine Python Implementierung existiert, übertragbar ist.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
DE200910004276 DE102009004276A1 (de) | 2009-01-05 | 2009-01-05 | Byte Coat: Nativer Bytcode Compiler für die Programmiersprache Python |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
DE200910004276 DE102009004276A1 (de) | 2009-01-05 | 2009-01-05 | Byte Coat: Nativer Bytcode Compiler für die Programmiersprache Python |
Publications (1)
Publication Number | Publication Date |
---|---|
DE102009004276A1 true DE102009004276A1 (de) | 2010-07-08 |
Family
ID=42234729
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE200910004276 Withdrawn DE102009004276A1 (de) | 2009-01-05 | 2009-01-05 | Byte Coat: Nativer Bytcode Compiler für die Programmiersprache Python |
Country Status (1)
Country | Link |
---|---|
DE (1) | DE102009004276A1 (de) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105574368A (zh) * | 2015-12-10 | 2016-05-11 | 华青融天(北京)技术股份有限公司 | 一种Python程序模块的安全调用方法和装置 |
CN106548046A (zh) * | 2016-10-25 | 2017-03-29 | 北京深思数盾科技股份有限公司 | 一种保护代码的装置和方法 |
-
2009
- 2009-01-05 DE DE200910004276 patent/DE102009004276A1/de not_active Withdrawn
Non-Patent Citations (1)
Title |
---|
Anonymous: Code Morphing. Wikipedia 19.12.2008. www.wikipedia.org /w/index. php?title=Code_morphing&oldid=259017467, rech.a.14.08. 09 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105574368A (zh) * | 2015-12-10 | 2016-05-11 | 华青融天(北京)技术股份有限公司 | 一种Python程序模块的安全调用方法和装置 |
CN105574368B (zh) * | 2015-12-10 | 2018-05-04 | 华青融天(北京)技术股份有限公司 | 一种Python程序模块的安全调用方法和装置 |
CN106548046A (zh) * | 2016-10-25 | 2017-03-29 | 北京深思数盾科技股份有限公司 | 一种保护代码的装置和方法 |
CN106548046B (zh) * | 2016-10-25 | 2020-11-20 | 北京纬百科技有限公司 | 一种保护代码的装置和方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE69819188T2 (de) | Programmschnittstellenumsetzer für rechner mit mehreren umgebungen | |
DE69735343T2 (de) | System, Verfahren und Vorrichtung zum direkten Ausführen eines architekturunabhängigen binären Programms | |
DE69924857T2 (de) | Programm-kode-umwandlung | |
DE69926602T2 (de) | Hybrider Rechtzeitkompiler der minimale Betriebsmittel verwendet | |
EP3032408B1 (de) | Verfahren zur erzeugung von lauffähigen applikationen mit dynamischen skalierbaren vektorgrafiken | |
DE4109258A1 (de) | Verfahren zum umwandeln der hardwarekonfiguration einer programmierbaren verknuepfungssteuerung und des entsprechenden steuerprogramms zur verwendung bei einer zweiten programmierbaren verknuepfungssteuerung | |
EP2332042A1 (de) | Verfahren und vorrichtung zum austauschen einer komponente eines computersystems | |
CN103942086A (zh) | 基于aadl的创建、分析和仿真混成系统模型的方法 | |
DE102009004276A1 (de) | Byte Coat: Nativer Bytcode Compiler für die Programmiersprache Python | |
WO2007025557A1 (de) | Migration und transformation von datenstrukturen | |
EP1197848A2 (de) | Verfahren zur automatischen Erzeugung von Programmcode | |
EP2965199A1 (de) | Verfahren zur überprüfung und/oder transformation eines computerprogramms mit statischen funktionen erster klasse | |
EP1010070B1 (de) | Verfahren zum umsetzen eines objektcodes in einen programmcode | |
WO2017186469A1 (de) | Sprachgesteuertes system | |
DE102009041098A1 (de) | Verfahren zur Kennzeichnung eines in einem Computerspeichersystem enthaltenden Computerprogrammabschnitts | |
EP0990203B1 (de) | Verfahren zum steuern einer datenverarbeitungsanlage | |
EP2757466B1 (de) | Computerimplementiertes Verfahren zum Generieren von Computerprogrammcode | |
DE102019214273A1 (de) | System und Verfahren zum Bereitstellen einer digitalen Nachbildung einer Anlage und entsprechendes Computerprogrammprodukt | |
Zundorf et al. | Explaining business process software with fulib-scenarios | |
DE102018129354A1 (de) | Verfahren zum Bearbeiten von Anwendungsprogrammen auf einem verteilten Automatisierungssystem | |
Almonaies et al. | A framework for migrating web applications to web services | |
Hřivnáčová | Integration of g4tools in Geant4 | |
EP1959430A2 (de) | Verfahren zur automatischen Generierung von VoiceXML-sprachapplicationen aus Sprachdialogmodellen | |
DE19617719A1 (de) | Verfahren zur Programmübersetzung eines in der Programmiersprache C++ geschriebenen Programms | |
Kaegi | Risk analysis of information systems by agent-based modeling of business processes |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
OM8 | Search report available as to paragraph 43 lit. 1 sentence 1 patent law | ||
R119 | Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee |
Effective date: 20110802 |