[Soot-list] Dava and synchronized blocks
Matteo Ceccarello
matteo.ceccarello at gmail.com
Fri Jun 28 18:43:53 EDT 2013
Hi all,
I'm trying to use Dava to decompile the |java.net.Socket| class. However
I keep getting an exception saying: "Could not verify approximated
Synchronized body!".
According to this email
http://www.sable.mcgill.ca/pipermail/soot-list/2007-June/001266.html the
problem may be in different aliases used to enter and exit monitors.
Hence I tried to apply |CopyPropagator.v().transform(body)| to transform
the body of methods by propagating copies. In this way aliases seem to
disappear. Starting from the following jimple representation of
|Socket.close()|
|
r0 := @this: java.net.Socket
$r3 = r0.<java.net.Socket: java.lang.Object closeLock>
r1 = $r3
entermonitor $r3
$z0 = virtualinvoke r0.<java.net.Socket: boolean isClosed()>()
if $z0 == 0 goto $z1 = r0.<java.net.Socket: boolean created>
exitmonitor r1
return
$z1 = r0.<java.net.Socket: boolean created>
if $z1 == 0 goto r0.<java.net.Socket: boolean closed> = 1
$r4 = r0.<java.net.Socket: java.net.SocketImpl impl>
virtualinvoke $r4.<java.net.SocketImpl: void close()>()
r0.<java.net.Socket: boolean closed> = 1
exitmonitor r1
goto [?= return]
$r5 := @caughtexception
r2 = $r5
exitmonitor r1
throw r2
return|
I correctly get
|r0 := @this: java.net.Socket
$r3 = r0.<java.net.Socket: java.lang.Object closeLock>
r1 = $r3
entermonitor $r3
$z0 = virtualinvoke r0.<java.net.Socket: boolean isClosed()>()
if $z0 == 0 goto $z1 = r0.<java.net.Socket: boolean created>
exitmonitor $r3
return
$z1 = r0.<java.net.Socket: boolean created>
if $z1 == 0 goto r0.<java.net.Socket: boolean closed> = 1
$r4 = r0.<java.net.Socket: java.net.SocketImpl impl>
virtualinvoke $r4.<java.net.SocketImpl: void close()>()
r0.<java.net.Socket: boolean closed> = 1
exitmonitor $r3
goto [?= return]
$r5 := @caughtexception
r2 = $r5
exitmonitor $r3
throw $r5
return|
with no signs of aliases in the |entermonitor| and |exitmonitor| statements
However I keep getting the same exception:
|Exception in thread "main" java.lang.RuntimeException: Could not verify approximated Synchronized body!
Method:
<java.net.Socket: void close()>Body:
===============================================================
[this := this: java.net.Socket, $r3 = closeLock, entermonitor $r3, if this.<java.net.Socket: boolean isClosed()>() == false goto (branch), goto [?= exitmonitor $r3], goto [?= (branch)], exitmonitor $r3, return, if created == false goto (branch), goto [?= closed = true], goto [?= closed = true], closed = true, exitmonitor $r3, goto [?= return], $r5 := @caughtexception, exitmonitor $r3, throw $r5, return, goto [?= $r5 := @caughtexception], goto [?= $r5 := @caughtexception], goto [?= $r5 := @caughtexception]]===============================================================
at soot.dava.toolkits.base.finders.SynchronizedBlockFinder.find(SynchronizedBlockFinder.java:164)
at soot.dava.DavaBody.<init>(DavaBody.java:326)
at soot.dava.Dava.newBody(Dava.java:84)
at edu.unipd.dei.modgen.generator.printer.ClassPrinter.javaSource(ClassPrinter.java:73)
at edu.unipd.dei.modgen.generator.printer.ClassPrinter.writeToFile(ClassPrinter.java:195)
at edu.unipd.dei.modgen.generator.ModelSetGenerator.generate(ModelSetGenerator.java:103)
at edu.unipd.dei.modgen.tool.Main.main(Main.java:91)|
Anyone has some clues on how I can solve it please?
Thank you
Matteo
--
Matteo Ceccarello, Computer Engineering student
Universita' di Padova, Dipartimento di Ingegneria dell'Informazione,
URL: http://www.dei.unipd.it/~ceccarel
LinkedIn: http://it.linkedin.com/pub/matteo-ceccarello/60/322/931/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.cs.mcgill.ca/pipermail/soot-list/attachments/20130629/7c0d978b/attachment.html
More information about the Soot-list
mailing list