3 ms·
Indeed. The lower level language must be more expressive by the "definition". It is more difficult to write but allows fine grain control. This is the reason so
by barahilia 10y ago
Indeed. The lower level language must be more expressive by the "definition". It is more difficult to write but allows fine grain control. This is the reason some optimization and obfuscation tricks are done in Assembler (native world, not Java). And hence disassembler simply can not re-translate it back.
- unsoundInput 10y agoThere are two valid ways for a disassembler mitigate this: a) decompile to a language in which the bytecode can be expressed (in a concise / expresive manner, Java would always be a "possible" target because of turing completeness) or b) accommodate for the fact that there could be signature collisions in java, e.g. by prefixing/suffixing the method name
- 0x0 10y agoIf you change the method name you end up with code that acts differently, just imagine something that does something like this pseudocode: if (!new Exception().getStackTrace().getSha1sum().startsWith("0000")) alert("hello decompiler") Your comment about java and turing completeness doesn't make sense unless you want the decompiler to basically output a java implementation of a JVM?