: WARNING - support of the decompiler is now VERY LIMITED. There are no active developers. This means waiting times in the issue tracker are very long and mostly depend on community. Sorry for the inconvenience.

List of issuesList of issues

#971 forgotten assignment for increment in first line
Author: user BeniBela
Date created:
Type: question
Visibility: Everybody
Assigned to:
Labels: AS3DecompilationObfuscated
State: opened Help

If the first line of a function is memberVariable++; it becomes _loc2_.memberVariable = _loc3_; with an undefined variable loc3. E.g.: trait method Qname(PackageNamespace(""),"onErrorHandler") dispid 0 method name null param Qname(PackageNamespace("flash.events"),"ErrorEvent") returns Qname(PackageNamespace(""),"void") body maxstack 3 localcount 4 initscopedepth 5 maxscopedepth 6 code getlocal_0 pushscope getlocal_0 newfunction 8897 pop jump ofs0011 divide getlocal_2 hasnext coerce_a getlocal_2 coerce_a ofs0011:dup setlocal_2 getproperty Qname(PackageNamespace(""),"numTries") increment_i setlocal_3 getlocal_2 getlocal_3 setproperty Qname(PackageNamespace(""),"numTries") jump ofs002a inclocal 2 inclocal 2 getlocal_2 declocal 2 coerce_a getlocal_3 ofs002a:kill 3 kill 2 getlocal_1 callpropvoid Qname(PackageNamespace(""),"stopPropagation") 0 getlocal_0 getproperty Qname(PackageNamespace(""),"numTries") getlocal_0 getproperty Qname(PackageNamespace(""),"maxTries") ifnlt ofs004d getlocal_0 pushnull initproperty Qname(PackageNamespace(""),"status") getlocal_0 callpropvoid Qname(PackageNamespace(""),"load") 0 jump ofs0062 ofs004d:getlocal_0 getlex Qname(PackageNamespace(""),"STATUS_ERROR") initproperty Qname(PackageNamespace(""),"status") getlocal_0 getlocal_1 initproperty Qname(PackageNamespace(""),"errorEvent") getlocal_0 getlocal_0 getproperty Qname(PackageNamespace(""),"errorEvent") callpropvoid Qname(PackageNamespace(""),"_dispatchErrorEvent") 1 ofs0062:returnvoid becomes public function onErrorHandler(param1:ErrorEvent) : void { _loc2_.numTries = _loc3_; param1.stopPropagation(); if(this.numTries < this.maxTries) { this.status = null; this.load(); } else { this.status = STATUS_ERROR; this.errorEvent = param1; this._dispatchErrorEvent(this.errorEvent); } }
Looks like turning on "Automatic deobfuscation" in settings solves the problem. The question is whether the decompiler should handle this outside the deobfuscation mode or not...
State: new→opened
Type: bug→question
Well, in a very old version where it did not do any deobsfucation, it could not show anything. So there seems to be always some deobfuscation enabled