joa / apparat

A framework to optmize ABC, SWC and SWF files.
GNU Lesser General Public License v2.1
210 stars 53 forks source link

java.lang.RuntimeException: finddef #4

Open gonchar opened 11 years ago

gonchar commented 11 years ago

Thank you for your great tools! I always use them.

I've caught an error, and can't to process my swf stripper, scala 2.9.2

<function0>: caught java.lang.RuntimeException: finddef
java.lang.RuntimeException: finddef
        at scala.sys.package$.error(package.scala:27)
        at scala.Predef$.error(Predef.scala:123)
        at apparat.bytecode.BytecodeDecoder$.readOp$1(BytecodeDecoder.scala:115)

        at apparat.bytecode.BytecodeDecoder$.build$1(BytecodeDecoder.scala:245)
        at apparat.bytecode.BytecodeDecoder$.apply(BytecodeDecoder.scala:252)
        at apparat.bytecode.Bytecode$.fromBody(Bytecode.scala:37)
        at apparat.abc.Abc$$anonfun$loadBytecode$2$$anonfun$apply$1.apply$mcV$sp
(Abc.scala:138)
        at apparat.abc.Abc$$anonfun$loadBytecode$2$$anonfun$apply$1.apply(Abc.sc
ala:136)
        at apparat.abc.Abc$$anonfun$loadBytecode$2$$anonfun$apply$1.apply(Abc.sc
ala:136)
        at scala.actors.Futures$$anonfun$1.apply(Future.scala:127)
        at scala.actors.Futures$$anonfun$1.apply(Future.scala:127)
        at scala.actors.FutureActor$$anonfun$act$1.apply(Future.scala:93)
        at scala.actors.FutureActor$$anonfun$act$1.apply(Future.scala:93)
        at scala.actors.Reactor$class.seq(Reactor.scala:280)
        at scala.actors.FutureActor.seq(Future.scala:55)
        at scala.actors.Reactor$$anon$3.andThen(Reactor.scala:258)
        at scala.actors.FutureActor.act(Future.scala:94)
        at scala.actors.Reactor$$anonfun$dostart$1.apply(Reactor.scala:222)
        at scala.actors.Reactor$$anonfun$dostart$1.apply(Reactor.scala:222)
        at scala.actors.ReactorTask.run(ReactorTask.scala:33)
        at scala.concurrent.forkjoin.ForkJoinPool$AdaptedRunnable.exec(ForkJoinP
ool.java:611)
        at scala.concurrent.forkjoin.ForkJoinTask.quietlyExec(ForkJoinTask.java:
422)
        at scala.concurrent.forkjoin.ForkJoinWorkerThread.mainLoop(ForkJoinWorke
rThread.java:340)
        at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThre
ad.java:325)
gonchar commented 11 years ago

oh, now I see

case Op.finddef => error("finddef")
joa commented 11 years ago

Might have been an undocumented op at that time. Will take a look next week. Currently on holidays.

Sent via mobile. Am 04.07.2013 02:22 schrieb "Sergey Gonchar" notifications@github.com:

oh, now I see

case Op.finddef => error("finddef")

— Reply to this email directly or view it on GitHubhttps://github.com/joa/apparat/issues/4#issuecomment-20452996 .

gonchar commented 11 years ago

Great, thank you!

joa commented 11 years ago

From tamarin-redux source: finddef has 1 argument which is a U30 and points to a multiname in the cpool. Here is the implementation of finddef if you care to fix it:

INSTR(finddef) {
  SAVE_EXPC;
  u1 = U30ARG;
  o1 = finddef_cache((ScriptObject**)&(*env->abcEnv()->finddefTable())[(uint32_t)u1],
      &aux_memory->methodFrame);
  *(++sp) = o1->atom();
  NEXT;
}

Looks like the usual optional namespaces for the multiname (in case it is a MutlinameL) which might be on the stack and resulting is the object for whatever finddef returns.

pigiuz commented 11 years ago

hi guys, hi joa, i just got in the same error by invoking the code coverage goal in a flexmojos build. in my case the error is related to a piece of code compiled with flacc from c++, hope this helps to restrict the scope of what caused this error. ciao