<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=Decompiler</id>
	<title>Decompiler - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=Decompiler"/>
	<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Decompiler&amp;action=history"/>
	<updated>2026-05-15T11:57:06Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>http://debianws.lexgopc.com/wiki143/index.php?title=Decompiler&amp;diff=7198658&amp;oldid=prev</id>
		<title>imported&gt;Dabmasterars: Fixed a typo, added more wikilinks.</title>
		<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Decompiler&amp;diff=7198658&amp;oldid=prev"/>
		<updated>2025-06-18T17:21:36Z</updated>

		<summary type="html">&lt;p&gt;Fixed a typo, added more wikilinks.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Short description|Program translating executable to source code}}&lt;br /&gt;
{{Use dmy dates|date=December 2019|cs1-dates=y}}A &amp;#039;&amp;#039;&amp;#039;decompiler&amp;#039;&amp;#039;&amp;#039; is a [[computer program]] that translates an [[executable]] file back into high-level [[source code]]. Unlike a [[compiler]], which converts [[High-level programming language|high-level]] code into [[machine code]], a decompiler performs the reverse process. While [[disassembler]]s translate [[executable]]s into [[assembly language]], decompilers go a step further by reconstructing the disassembly into [[High-level programming language|higher-level languages]] like [[C (programming language)|C]]. Due to the one-way nature of the compilation process, decompilers usually cannot perfectly recreate the original source code. They often produce obfuscated and less readable code.&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
Decompilation is the process of transforming executable code into a high-level, human-readable format using a decompiler. This process is commonly used for tasks that involve [[Reverse engineering|reverse-engineering]] the logic behind executable code, such as recovering lost or unavailable source code. Decompilers face inherent challenges due to the loss of critical information during the compilation process, such as variable names, [[Comment (computer programming)|comments]], and code structure.&lt;br /&gt;
&lt;br /&gt;
Certain factors can impact the success of decompilation. Executables containing detailed [[metadata]], such as those used by [[Java (programming language)|Java]] and [[.NET]], are easier to reverse-engineer because they often retain [[Class (computer programming)|class structures]], [[method signature]]s, and [[debugging]] information. Executable files stripped of such context are far more challenging to translate into meaningful source code. &lt;br /&gt;
&lt;br /&gt;
Some software developers may [[Obfuscation (software)|obfuscate]], pack, or [[Encryption|encrypt]] parts of their executable programs, making the decompiled code much harder to interpret. These techniques are often done to deter reverse-engineering, making the process more difficult and time-intensive.&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
Decompilers can be thought of as composed of a series of phases each of which contributes specific aspects of the overall decompilation process.&lt;br /&gt;
&lt;br /&gt;
===Loader===&lt;br /&gt;
The first decompilation phase loads and parses the input machine code or [[intermediate language]] program&amp;#039;s [[binary file]] format. It should be able to discover basic facts about the input program, such as the architecture (Pentium, PowerPC, etc.) and the entry point. In many cases, it should be able to find the equivalent of the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; function of a [[C (programming language)|C]] program, which is the start of the &amp;#039;&amp;#039;&amp;#039;user written&amp;#039;&amp;#039;&amp;#039; code. This excludes the [[Execution (computing)#Runtime|runtime]] initialization code, which should not be decompiled if possible. If available the [[symbol table]]s and debug data are also loaded. The front end may be able to identify the libraries used even if they are linked with the code, this will provide library interfaces. If it can determine the compiler or compilers used it may provide useful information in identifying code idioms.&amp;lt;ref name=&amp;quot;Cifuentes_1995&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Disassembly===&lt;br /&gt;
The next logical phase is the [[disassembler|disassembly]] of machine code instructions into a machine independent intermediate representation (IR). For example, the [[Pentium]] machine instruction&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
mov    eax, [ebx+0x04]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
might be translated to the IR&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
eax  := m[ebx+4];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Idioms===&lt;br /&gt;
Idiomatic machine code sequences are sequences of code whose combined [[Semantics (computer science)|semantics]] are not immediately apparent from the instructions&amp;#039; individual semantics. Either as part of the disassembly phase, or as part of later analyses, these idiomatic sequences need to be translated into known equivalent IR. For example, the [[x86 assembly language|x86 assembly code]]:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasm&amp;quot;&amp;gt;&lt;br /&gt;
    cdq    eax             ; edx is set to the sign-extension≠edi,edi +(tex)push&lt;br /&gt;
    xor    eax, edx&lt;br /&gt;
    sub    eax, edx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
could be translated to&lt;br /&gt;
 eax  := abs(eax);&lt;br /&gt;
&lt;br /&gt;
Some idiomatic sequences are machine independent; some involve only one instruction. For example, {{code|2=nasm|xor eax, eax}} clears the &amp;lt;code&amp;gt;eax&amp;lt;/code&amp;gt; register (sets it to zero). This can be implemented with a machine independent simplification rule, such as &amp;lt;code&amp;gt;a = 0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In general, it is best to delay detection of idiomatic sequences if possible, to later stages that are less affected by instruction ordering. For example, the instruction scheduling phase of a compiler may insert other instructions into an idiomatic sequence, or change the ordering of instructions in the sequence. A [[pattern matching]] process in the disassembly phase would probably not recognize the altered pattern. Later phases group instruction expressions into more complex expressions, and modify them into a canonical (standardized) form, making it more likely that even the altered idiom will match a higher level pattern later in the decompilation.&lt;br /&gt;
&lt;br /&gt;
It is particularly important to recognize the compiler idioms for [[subroutine]] calls, [[exception handling]], and [[switch statement]]s. Some languages also have extensive support for [[String (computer science)|string]]s or [[long integer]]s.&lt;br /&gt;
&lt;br /&gt;
===Program analysis===&lt;br /&gt;
Various program analyses can be applied to the IR. In particular, expression propagation combines the semantics of several instructions into more complex expressions. For example,&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
    mov   eax,[ebx+0x04]&lt;br /&gt;
    add   eax,[ebx+0x08]&lt;br /&gt;
    sub   [ebx+0x0C],eax&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
could result in the following IR after expression propagation:&lt;br /&gt;
 m[ebx+12]  := m[ebx+12] - (m[ebx+4] + m[ebx+8]);&lt;br /&gt;
The resulting expression is more like high level language, and has also eliminated the use of the machine register &amp;lt;code&amp;gt;eax&amp;lt;/code&amp;gt;. Later analyses may eliminate the &amp;lt;code&amp;gt;ebx&amp;lt;/code&amp;gt; register.&lt;br /&gt;
&lt;br /&gt;
===Data flow analysis===&lt;br /&gt;
The places where register contents are defined and used must be traced using [[data flow analysis]]. The same analysis can be applied to locations that are used for temporaries and local data. A different name can then be formed for each such connected set of value definitions and uses. It is possible that the same local variable location was used for more than one variable in different parts of the original program. Even worse it is possible for the data flow analysis to identify a path whereby a value may flow between two such uses even though it would never actually happen or matter in reality. This may in bad cases lead to needing to define a location as a union of types. The decompiler may allow the user to explicitly break such unnatural dependencies which will lead to clearer code. This of course means a variable is potentially used without being initialized and so indicates a problem in the original program.{{citation needed|date=June 2022}}&lt;br /&gt;
&lt;br /&gt;
===Type analysis===&lt;br /&gt;
A good machine code decompiler will perform type analysis. Here, the way registers or memory locations are used result in constraints on the possible type of the location. For example, an &amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt; instruction implies that the operand is an integer; programs do not use such an operation on [[floating point]] values (except in special library code) or on [[Pointer (computer programming)|pointers]]. An &amp;lt;code&amp;gt;add&amp;lt;/code&amp;gt; instruction results in three constraints, since the operands may be both integer, or one integer and one pointer (with integer and pointer results respectively; the third constraint comes from the ordering of the two operands when the types are different).&amp;lt;ref name=&amp;quot;Mycroft_1999&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Various high level expressions can be recognized which trigger recognition of structures or arrays. However, it is difficult to distinguish many of the possibilities, because of the freedom that machine code or even some high level languages such as C allow with casts and pointer arithmetic.&lt;br /&gt;
&lt;br /&gt;
The example from the previous section could result in the following high level code:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct T1 {&lt;br /&gt;
    int v0004;&lt;br /&gt;
    int v0008;&lt;br /&gt;
    int v000C;&lt;br /&gt;
};&lt;br /&gt;
struct T1 *ebx;&lt;br /&gt;
ebx-&amp;gt;v000C -= ebx-&amp;gt;v0004 + ebx-&amp;gt;v0008;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Structuring===&lt;br /&gt;
The penultimate decompilation phase involves structuring of the IR into higher level constructs such as &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; loops and &amp;lt;code&amp;gt;if/then/else&amp;lt;/code&amp;gt; conditional statements. For example, the machine code&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
    xor eax, eax&lt;br /&gt;
l0002:&lt;br /&gt;
    or  ebx, ebx&lt;br /&gt;
    jge l0003&lt;br /&gt;
    add eax,[ebx]&lt;br /&gt;
    mov ebx,[ebx+0x4]&lt;br /&gt;
    jmp l0002&lt;br /&gt;
l0003:&lt;br /&gt;
    mov [0x10040000],eax&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
could be translated into:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
eax = 0;&lt;br /&gt;
while (ebx &amp;lt; 0) {&lt;br /&gt;
    eax += ebx-&amp;gt;v0000;&lt;br /&gt;
    ebx = ebx-&amp;gt;v0004;&lt;br /&gt;
}&lt;br /&gt;
v10040000 = eax;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Unstructured code is more difficult to translate into structured code than already structured code. Solutions include replicating some code, or adding Boolean variables.&amp;lt;ref name=&amp;quot;Cifuentes_1994&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Code generation===&lt;br /&gt;
The final phase is the generation of the high level code in the back end of the decompiler. Just as a compiler may have several back ends for generating machine code for different architectures, a decompiler may have several back ends for generating high level code in different high level languages.&lt;br /&gt;
&lt;br /&gt;
Just before code generation, it may be desirable to allow an interactive editing of the IR, perhaps using some form of [[graphical user interface]]. This would allow the user to enter comments, and non-generic variable and function names. However, these are almost as easily entered in a post decompilation edit. The user may want to change structural aspects, such as converting a &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; loop to a &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; loop. These are less readily modified with a simple text editor, although source [[code refactoring]] tools may assist with this process. The user may need to enter information that failed to be identified during the type analysis phase, e.g. modifying a memory expression to an array or structure expression. Finally, incorrect IR may need to be corrected, or changes made to cause the output code to be more readable.&lt;br /&gt;
&lt;br /&gt;
===Other techniques===&lt;br /&gt;
Decompilers using [[neural network]]s have been developed. Such a decompiler may be trained by [[machine learning]] to improve its accuracy over time.&amp;lt;ref name=&amp;quot;Meta&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Legality==&lt;br /&gt;
{{original research|date=April 2013}}&lt;br /&gt;
{{Expert needed|Law|section|talk=Legality section and copyright law|date=March 2011}}&lt;br /&gt;
The majority of computer programs are covered by [[copyright]] laws. Although the precise scope of what is covered by copyright differs from region to region, copyright law generally provides the author (the programmer(s) or employer) with a collection of exclusive rights to the program.&amp;lt;ref name=&amp;quot;Rowland_2005&amp;quot;/&amp;gt; These rights include the right to [[File copying|make copies]], including copies made into the computer’s [[Random Access Memory|RAM]] (unless creating such a copy is essential for using the program).&amp;lt;ref name=&amp;quot;Law&amp;quot;/&amp;gt;&lt;br /&gt;
Since the decompilation process involves making multiple such copies, it is generally prohibited without the authorization of the copyright holder. However, because decompilation is often a necessary step in achieving software [[interoperability]], copyright laws in both the United States and Europe permit decompilation to a limited extent.&lt;br /&gt;
&lt;br /&gt;
In the United States, the copyright [[fair use]] defence has been successfully invoked in decompilation cases. For example, in &amp;#039;&amp;#039;[[Sega v. Accolade]]&amp;#039;&amp;#039;, the court held that Accolade could lawfully engage in decompilation in order to circumvent the software locking mechanism used by Sega&amp;#039;s game consoles.&amp;lt;ref name=&amp;quot;PT_2004&amp;quot;/&amp;gt; Additionally, the [[Digital Millennium Copyright Act]] (PUBLIC LAW 105–304&amp;lt;ref name=&amp;quot;DMCA_1998&amp;quot;/&amp;gt;) has proper exemptions for both Security Testing and Evaluation in §1201(i), and Reverse Engineering in §1201(f).&amp;lt;ref name=&amp;quot;QQVDZ&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Europe, the [[Computer Programs Directive|1991 Software Directive]] explicitly provides for a right to decompile in order to achieve interoperability. The result of a heated debate between, on the one side, software protectionists, and, on the other, academics as well as independent software developers, Article 6 permits decompilation only if a number of conditions are met:&lt;br /&gt;
&lt;br /&gt;
* First, a person or entity must have a license to use the program to be decompiled.&lt;br /&gt;
* Second, decompilation must be necessary to achieve [[interoperability]] with the target program or other programs. Interoperability information should therefore not be readily available, such as through manuals or [[Application programming interface|API]] documentation. This is an important limitation. The necessity must be proven by the decompiler. The purpose of this important limitation is primarily to provide an incentive for developers to document and disclose their products&amp;#039; interoperability information.&amp;lt;ref name=&amp;quot;Czarnota_1991&amp;quot;/&amp;gt;&lt;br /&gt;
* Third, the decompilation process must, if possible, be confined to the parts of the target program relevant to interoperability. Since one of the purposes of decompilation is to gain an understanding of the program structure, this third limitation may be difficult to meet. Again, the burden of proof is on the decompiler.&lt;br /&gt;
&lt;br /&gt;
In addition, Article 6 prescribes that the information obtained through decompilation may not be used for other purposes and that it may not be given to others.&lt;br /&gt;
&lt;br /&gt;
Overall, the decompilation right provided by Article 6 [[Codification (law)|codifies]] what is claimed to be common practice in the software industry. Few European lawsuits are known to have emerged from the decompilation right. This could be interpreted as meaning one of three things:&lt;br /&gt;
&lt;br /&gt;
#) the decompilation right is not used frequently and the decompilation right may therefore have been unnecessary,&lt;br /&gt;
#) the decompilation right functions well and provides sufficient legal certainty not to give rise to legal disputes or&lt;br /&gt;
#) illegal decompilation goes largely undetected.&lt;br /&gt;
&lt;br /&gt;
In a report of 2000 regarding implementation of the Software Directive by the European member states, the [[European Commission]] seemed to support the second interpretation.&amp;lt;ref name=&amp;quot;EU&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Disassembler]]&lt;br /&gt;
* [[Binary recompiler]]&lt;br /&gt;
* [[Linker (computing)]]&lt;br /&gt;
* [[Abstract interpretation]]&lt;br /&gt;
* [[Resource editor]]&lt;br /&gt;
&lt;br /&gt;
=== Java decompilers ===&lt;br /&gt;
* [[Mocha (decompiler)|Mocha decompiler]]&lt;br /&gt;
* [[JD Decompiler]]&lt;br /&gt;
* [[JAD (JAva Decompiler)|JAD decompiler]]&lt;br /&gt;
&lt;br /&gt;
=== Other decompilers ===&lt;br /&gt;
* [[.NET Reflector]]&lt;br /&gt;
* [[dotPeek]]&lt;br /&gt;
* [[JEB Decompiler]] (Android Dalvik, Intel x86, ARM, MIPS, WebAssembly, Ethereum)&lt;br /&gt;
* [[Ghidra]]&lt;br /&gt;
* [[Ida pro|IDA Pro]], which includes a decompiler as an optional paid feature&lt;br /&gt;
* [[Binary Ninja]]&lt;br /&gt;
* [https://pypi.org/project/uncompyle6/ uncompyle6] (Python Bytecode from 1.0 to 3.8)&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
{{reflist|refs=&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Cifuentes_1994&amp;quot;&amp;gt;{{cite book |author-first=Cristina |author-last=Cifuentes |title=Reverse Compilation Techniques |chapter=Chapter 6 |type=PhD thesis |publisher=[[Queensland University of Technology]] |date=1994 |url=http://www.labri.fr/perso/fleury/download/papers/binary_analysis/cifuentes-thesis.pdf |access-date=2019-12-21 |url-status=live |archive-url=https://web.archive.org/web/20161122154356/http://www.labri.fr/perso/fleury/download/papers/binary_analysis/cifuentes-thesis.pdf |archive-date=2016-11-22}})&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Cifuentes_1995&amp;quot;&amp;gt;{{cite journal |title=Decompilation of Binary Programs |journal=Software: Practice and Experience |author-first1=Cristina |author-last1=Cifuentes |author-first2=K. John |author-last2=Gough |volume=25 |issue=7 |pages=811–829 |date=July 1995 |citeseerx=10.1.1.14.8073 |doi=10.1002/spe.4380250706|s2cid=8229401}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Mycroft_1999&amp;quot;&amp;gt;{{cite book |chapter=Type-Based Decompilation |title=Programming languages and systems: 8th European Symposium on Programming Languages and Systems |author-first=Alan |author-last=Mycroft |editor-first=S. Doaitse |editor-last=Swierstra |pages=208–223 |date=1999 |publisher=[[Springer-Verlag]] |isbn=3-540-65699-5}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Rowland_2005&amp;quot;&amp;gt;{{cite book |title=Information technology law |author-first=Diane |author-last=Rowland |date=2005 |edition=3 |publisher=Cavendish |isbn=1-85941-756-6}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Law&amp;quot;&amp;gt;{{cite web |url=http://www.copyright.gov/title17/92chap1.html#106 |title=U.S. Copyright Office - Copyright Law: Chapter 1 |access-date=2014-04-10 |archive-date=2017-12-25 |archive-url=https://web.archive.org/web/20171225173213/http://www.copyright.gov/title17/92chap1.html#106 |url-status=live}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;PT_2004&amp;quot;&amp;gt;{{cite web |url=http://www.program-transformation.org/Transform/LegalityOfDecompilation |title=The Legality of Decompilation |publisher=Program-transformation.org |date=2004-12-03 |access-date=2010-09-15 |archive-date=2010-09-22 |archive-url=https://web.archive.org/web/20100922091938/http://www.program-transformation.org/Transform/LegalityOfDecompilation |url-status=live}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;DMCA_1998&amp;quot;&amp;gt;{{cite web |url=http://www.gpo.gov/fdsys/pkg/PLAW-105publ304/pdf/PLAW-105publ304.pdf |title=Digital Millennium Copyright Act |publisher=[[US Congress]] |date=1998-10-28 |access-date=2013-11-15 |archive-date=2013-12-10 |archive-url=https://web.archive.org/web/20131210205708/http://www.gpo.gov/fdsys/pkg/PLAW-105publ304/pdf/PLAW-105publ304.pdf |url-status=live}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Czarnota_1991&amp;quot;&amp;gt;{{cite book |author-first1=Bridget |author-last1=Czarnota |author-first2=Robert J. |author-last2=Hart |title=Legal protection of computer programs in Europe: a guide to the EC directive |date=1991 |location=London |publisher=[[Butterworths Tolley]] |isbn=0-40600542-7}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;EU&amp;quot;&amp;gt;{{cite web |url=https://eur-lex.europa.eu/legal-content/EN/ALL/?uri=CELEX:52000DC0199 |title=Report from the Commission to the Council, the European Parliament and the Economic and Social Committee on the implementation and effects of Directive 91/250/EEC on the legal protection of computer programs |access-date=2020-12-26 |archive-date=2020-12-04 |archive-url=https://web.archive.org/web/20201204144726/https://eur-lex.europa.eu/legal-content/EN/ALL/?uri=CELEX:52000DC0199 |url-status=live}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Meta&amp;quot;&amp;gt;{{cite web |url=https://ai.facebook.com/blog/introducing-n-bref-a-neural-based-decompiler-framework/|title=Introducing N-Bref: a neural-based decompiler framework |author-first1=Yuandong |author-last1=Tian |author-first2=Cheng |author-last2=Fu |date=2021-01-27 |access-date=2022-12-30}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;QQVDZ&amp;quot;&amp;gt;{{Cite web |url=https://www.federalregister.gov/d/2018-23241/p-26 |title=Federal Register :: Request Access |date=26 October 2018 |access-date=2021-01-31 |archive-date=2022-01-25 |archive-url=https://web.archive.org/web/20220125073820/https://www.federalregister.gov/documents/2018/10/26/2018-23241/exemption-to-prohibition-on-circumvention-of-copyright-protection-systems-for-access-control |url-status=live}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
{{Wiktionary|decompiler}}&lt;br /&gt;
{{Wikibooks|Reverse Engineering}}&lt;br /&gt;
&lt;br /&gt;
{{Authority control}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Compilers|*]]&lt;br /&gt;
[[Category:Decompilers| ]]&lt;br /&gt;
[[Category:Utility software types]]&lt;br /&gt;
[[Category:Reverse engineering]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Dabmasterars</name></author>
	</entry>
</feed>