diff options
Diffstat (limited to 'docs/manual/retrace/examples.html')
-rw-r--r-- | docs/manual/retrace/examples.html | 346 |
1 files changed, 0 insertions, 346 deletions
diff --git a/docs/manual/retrace/examples.html b/docs/manual/retrace/examples.html deleted file mode 100644 index 4eef0ff..0000000 --- a/docs/manual/retrace/examples.html +++ /dev/null @@ -1,346 +0,0 @@ -<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<html> -<head> -<meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> -<meta http-equiv="content-style-type" content="text/css"> -<link rel="stylesheet" type="text/css" href="../style.css"> -<title>ReTrace Examples</title> -</head> -<body> - -<script type="text/javascript" language="JavaScript"> -<!-- -if (window.self==window.top) - document.write('<a class="largebutton" target="_top" href="../../index.html#manual/retrace/examples.html">ProGuard index</a> <a class="largebutton" target="_top" href="http://www.saikoa.com/dexguard">DexGuard</a> <a class="largebutton" target="_top" href="http://www.saikoa.com/">Saikoa</a> <a class="largebutton" target="other" href="http://sourceforge.net/projects/proguard/">Sourceforge</a>') -//--> -</script> -<noscript> -<a class="largebutton" target="_top" href="../../index.html#manual/retrace/examples.html">ProGuard index</a> -<a class="largebutton" target="_top" href="http://www.saikoa.com/dexguard">DexGuard</a> -<a class="largebutton" target="_top" href="http://www.saikoa.com/">Saikoa</a> -<a class="largebutton" target="other" href="http://sourceforge.net/projects/proguard/">Sourceforge</a> -</noscript> - -<h2>Examples</h2> - -Some typical example uses: -<ol> -<li><a href="#with">Restoring a stack trace with line numbers</a></li> -<li><a href="#withverbose">Restoring a stack trace with line numbers - (verbose)</a></li> -<li><a href="#without">Restoring a stack trace without line numbers</a></li> -</ol> - -<h3><a name="with">Restoring a stack trace with line numbers</a></h3> - -Assume for instance ProGuard itself has been obfuscated using the following -extra options: -<pre> --printmapping proguard.map - --renamesourcefileattribute ProGuard --keepattributes SourceFile,LineNumberTable -</pre> -<p> - -Now assume the processed application throws an exception, and we have saved the -stack trace in <code>proguard.trace</code>, shown below. Of course, in real -life ProGuard rarely throws exceptions, so this is a purposely generated -exception. :) - -<pre> -Exception in thread "main" java.lang.Error: Random exception - at pro.bY.a(ProGuard:576) - at pro.bO.a(ProGuard:431) - at pro.bj.a(ProGuard:145) - at pro.bY.a(ProGuard:522) - at pro.bj.a(ProGuard:129) - at pro.bN.a(ProGuard:125) - at pro.bY.a(ProGuard:251) - at pro.bY.a(ProGuard:229) - at pro.l.a(ProGuard:55) - at pro.bo.b(ProGuard:405) - at pro.ci.a(ProGuard:51) - at pro.bo.a(ProGuard:356) - at pro.be.a(ProGuard:109) - at pro.bo.a(ProGuard:356) - at pro.be.a(ProGuard:186) - at pro.bg.a(ProGuard:369) - at pro.bY.a(ProGuard:286) - at pro.bh.a(ProGuard:55) - at pro.bg.b(ProGuard:408) - at pro.bY.a(ProGuard:190) - at pro.bg.a(ProGuard:369) - at pro.M.a(ProGuard:110) - at pro.bY.a(ProGuard:449) - at pro.M.a(ProGuard:99) - at pro.bo.a(ProGuard:372) - at pro.bY.a(ProGuard:649) - at pro.bY.a(ProGuard:112) - at pro.P.a(ProGuard:66) - at pro.p.a(ProGuard:83) - at pro.bU.a(ProGuard:69) - at pro.bo.a(ProGuard:356) - at pro.J.a(ProGuard:149) - at pro.I.a(ProGuard:49) - at pro.J.a(ProGuard:105) - at pro.cf.c(ProGuard:370) - at pro.cf.a(ProGuard:317) - at pro.bc.a(ProGuard:55) - at proguard.ProGuard.a(ProGuard:363) - at proguard.ProGuard.c(ProGuard:187) - at proguard.ProGuard.b(ProGuard:385) - at proguard.ProGuard.main(ProGuard:429) -</pre> -<p> - -We can then use the following command to recover the stack trace: -<pre> -<b>java -jar retrace.jar proguard.map proguard.trace</b> -</pre> -<p> - -The output will look as follows: -<pre> -Exception in thread "main" java.lang.Error: Random exception - at proguard.shrink.UsageMarker.visitInstruction(ProGuard:576) - at proguard.classfile.instruction.GenericInstruction.accept(ProGuard:431) - at proguard.classfile.CodeAttrInfo.instructionsAccept(ProGuard:145) - at proguard.shrink.UsageMarker.visitCodeAttrInfo(ProGuard:522) - at proguard.classfile.CodeAttrInfo.accept(ProGuard:129) - at proguard.classfile.ProgramMemberInfo.attributesAccept(ProGuard:125) - at proguard.shrink.UsageMarker.visitMemberInfo(ProGuard:251) - at proguard.shrink.UsageMarker.visitProgramMethodInfo(ProGuard:229) - at proguard.classfile.ProgramMethodInfo.accept(ProGuard:55) - at proguard.classfile.ProgramClassFile.methodAccept(ProGuard:405) - at proguard.classfile.visitor.NamedMethodVisitor.visitProgramClassFile(ProGuard:51) - at proguard.classfile.ProgramClassFile.accept(ProGuard:356) - at proguard.classfile.visitor.ClassFileUpDownTraveler.visitProgramClassFile(ProGuard:109) - at proguard.classfile.ProgramClassFile.accept(ProGuard:356) - at proguard.classfile.visitor.ClassFileUpDownTraveler.visitLibraryClassFile(ProGuard:186) - at proguard.classfile.LibraryClassFile.accept(ProGuard:369) - at proguard.shrink.UsageMarker.visitLibraryMethodInfo(ProGuard:286) - at proguard.classfile.LibraryMethodInfo.accept(ProGuard:55) - at proguard.classfile.LibraryClassFile.methodsAccept(ProGuard:408) - at proguard.shrink.UsageMarker.visitLibraryClassFile(ProGuard:190) - at proguard.classfile.LibraryClassFile.accept(ProGuard:369) - at proguard.classfile.ClassCpInfo.referencedClassAccept(ProGuard:110) - at proguard.shrink.UsageMarker.visitClassCpInfo(ProGuard:449) - at proguard.classfile.ClassCpInfo.accept(ProGuard:99) - at proguard.classfile.ProgramClassFile.constantPoolEntryAccept(ProGuard:372) - at proguard.shrink.UsageMarker.markCpEntry(ProGuard:649) - at proguard.shrink.UsageMarker.visitProgramClassFile(ProGuard:112) - at proguard.classfile.visitor.VariableClassFileVisitor.visitProgramClassFile(ProGuard:66) - at proguard.classfile.visitor.MultiClassFileVisitor.visitProgramClassFile(ProGuard:83) - at proguard.classfile.visitor.FilteredClassFileVisitor.visitProgramClassFile(ProGuard:69) - at proguard.classfile.ProgramClassFile.accept(ProGuard:356) - at proguard.classfile.ClassPool.classFileAccept(ProGuard:149) - at proguard.classfile.visitor.NamedClassFileVisitor.visitClassPool(ProGuard:49) - at proguard.classfile.ClassPool.accept(ProGuard:105) - at proguard.KeepCommand.executeShrinkingPhase(ProGuard:370) - at proguard.KeepCommand.execute(ProGuard:317) - at proguard.CompoundCommand.execute(ProGuard:55) - at proguard.ProGuard.executeCommands(ProGuard:363) - at proguard.ProGuard.shrink(ProGuard:187) - at proguard.ProGuard.execute(ProGuard:385) - at proguard.ProGuard.main(ProGuard:429) -</pre> - -<h3><a name="withverbose">Restoring a stack trace with line numbers (verbose)</a></h3> - -In the previous example, we could also use the verbose flag: -<pre> -<b>java -jar retrace.jar -verbose proguard.map proguard.trace</b> -</pre> -<p> - -The output will then look as follows: -<pre> -Exception in thread "main" java.lang.Error: Random exception - at proguard.shrink.UsageMarker.void visitInstruction(proguard.classfile.ClassFile,proguard.classfile.instruction.Instruction)(ProGuard:576) - at proguard.classfile.instruction.GenericInstruction.void accept(proguard.classfile.ClassFile,proguard.classfile.instruction.InstructionVisitor)(ProGuard:431) - at proguard.classfile.CodeAttrInfo.void instructionsAccept(proguard.classfile.ClassFile,proguard.classfile.instruction.InstructionVisitor)(ProGuard:145) - at proguard.shrink.UsageMarker.void visitCodeAttrInfo(proguard.classfile.ClassFile,proguard.classfile.CodeAttrInfo)(ProGuard:522) - at proguard.classfile.CodeAttrInfo.void accept(proguard.classfile.ClassFile,proguard.classfile.visitor.AttrInfoVisitor)(ProGuard:129) - at proguard.classfile.ProgramMemberInfo.void attributesAccept(proguard.classfile.ProgramClassFile,proguard.classfile.visitor.AttrInfoVisitor)(ProGuard:125) - at proguard.shrink.UsageMarker.void visitMemberInfo(proguard.classfile.ProgramClassFile,proguard.classfile.ProgramMemberInfo)(ProGuard:251) - at proguard.shrink.UsageMarker.void visitProgramMethodInfo(proguard.classfile.ProgramClassFile,proguard.classfile.ProgramMethodInfo)(ProGuard:229) - at proguard.classfile.ProgramMethodInfo.void accept(proguard.classfile.ProgramClassFile,proguard.classfile.visitor.MemberInfoVisitor)(ProGuard:55) - at proguard.classfile.ProgramClassFile.void methodAccept(proguard.classfile.visitor.MemberInfoVisitor,java.lang.String,java.lang.String)(ProGuard:405) - at proguard.classfile.visitor.NamedMethodVisitor.void visitProgramClassFile(proguard.classfile.ProgramClassFile)(ProGuard:51) - at proguard.classfile.ProgramClassFile.void accept(proguard.classfile.visitor.ClassFileVisitor)(ProGuard:356) - at proguard.classfile.visitor.ClassFileUpDownTraveler.void visitProgramClassFile(proguard.classfile.ProgramClassFile)(ProGuard:109) - at proguard.classfile.ProgramClassFile.void accept(proguard.classfile.visitor.ClassFileVisitor)(ProGuard:356) - at proguard.classfile.visitor.ClassFileUpDownTraveler.void visitLibraryClassFile(proguard.classfile.LibraryClassFile)(ProGuard:186) - at proguard.classfile.LibraryClassFile.void accept(proguard.classfile.visitor.ClassFileVisitor)(ProGuard:369) - at proguard.shrink.UsageMarker.void visitLibraryMethodInfo(proguard.classfile.LibraryClassFile,proguard.classfile.LibraryMethodInfo)(ProGuard:286) - at proguard.classfile.LibraryMethodInfo.void accept(proguard.classfile.LibraryClassFile,proguard.classfile.visitor.MemberInfoVisitor)(ProGuard:55) - at proguard.classfile.LibraryClassFile.void methodsAccept(proguard.classfile.visitor.MemberInfoVisitor)(ProGuard:408) - at proguard.shrink.UsageMarker.void visitLibraryClassFile(proguard.classfile.LibraryClassFile)(ProGuard:190) - at proguard.classfile.LibraryClassFile.void accept(proguard.classfile.visitor.ClassFileVisitor)(ProGuard:369) - at proguard.classfile.ClassCpInfo.void referencedClassAccept(proguard.classfile.visitor.ClassFileVisitor)(ProGuard:110) - at proguard.shrink.UsageMarker.void visitClassCpInfo(proguard.classfile.ClassFile,proguard.classfile.ClassCpInfo)(ProGuard:449) - at proguard.classfile.ClassCpInfo.void accept(proguard.classfile.ClassFile,proguard.classfile.visitor.CpInfoVisitor)(ProGuard:99) - at proguard.classfile.ProgramClassFile.void constantPoolEntryAccept(proguard.classfile.visitor.CpInfoVisitor,int)(ProGuard:372) - at proguard.shrink.UsageMarker.void markCpEntry(proguard.classfile.ClassFile,int)(ProGuard:649) - at proguard.shrink.UsageMarker.void visitProgramClassFile(proguard.classfile.ProgramClassFile)(ProGuard:112) - at proguard.classfile.visitor.VariableClassFileVisitor.void visitProgramClassFile(proguard.classfile.ProgramClassFile)(ProGuard:66) - at proguard.classfile.visitor.MultiClassFileVisitor.void visitProgramClassFile(proguard.classfile.ProgramClassFile)(ProGuard:83) - at proguard.classfile.visitor.FilteredClassFileVisitor.void visitProgramClassFile(proguard.classfile.ProgramClassFile)(ProGuard:69) - at proguard.classfile.ProgramClassFile.void accept(proguard.classfile.visitor.ClassFileVisitor)(ProGuard:356) - at proguard.classfile.ClassPool.void classFileAccept(proguard.classfile.visitor.ClassFileVisitor,java.lang.String)(ProGuard:149) - at proguard.classfile.visitor.NamedClassFileVisitor.void visitClassPool(proguard.classfile.ClassPool)(ProGuard:49) - at proguard.classfile.ClassPool.void accept(proguard.classfile.visitor.ClassPoolVisitor)(ProGuard:105) - at proguard.KeepCommand.void executeShrinkingPhase(proguard.classfile.ClassPool,proguard.classfile.ClassPool)(ProGuard:370) - at proguard.KeepCommand.void execute(int,proguard.classfile.ClassPool,proguard.classfile.ClassPool)(ProGuard:317) - at proguard.CompoundCommand.void execute(int,proguard.classfile.ClassPool,proguard.classfile.ClassPool)(ProGuard:55) - at proguard.ProGuard.void executeCommands(int)(ProGuard:363) - at proguard.ProGuard.void shrink()(ProGuard:187) - at proguard.ProGuard.void execute(java.lang.String[])(ProGuard:385) - at proguard.ProGuard.void main(java.lang.String[])(ProGuard:429) -</pre> - - -<h3><a name="without">Restoring a stack trace without line numbers</a></h3> - -Assume for instance ProGuard itself has been obfuscated using the following -extra options, this time without preserving the line number tables: -<pre> --printmapping proguard.map -</pre> -<p> - -A stack trace <code>proguard.trace</code> will then lack line number -information: -<pre> -Exception in thread "main" java.lang.Error: Random exception - at pro.bY.a(Unknown Source) - at pro.bO.a(Unknown Source) - at pro.bj.a(Unknown Source) - at pro.bY.a(Unknown Source) - at pro.bj.a(Unknown Source) - at pro.bN.a(Unknown Source) - at pro.bY.a(Unknown Source) - at pro.bY.a(Unknown Source) - at pro.l.a(Unknown Source) - at pro.bo.b(Unknown Source) - at pro.ci.a(Unknown Source) - at pro.bo.a(Unknown Source) - at pro.be.a(Unknown Source) - at pro.bo.a(Unknown Source) - at pro.be.a(Unknown Source) - at pro.bg.a(Unknown Source) - at pro.bY.a(Unknown Source) - at pro.bh.a(Unknown Source) - at pro.bg.b(Unknown Source) - at pro.bY.a(Unknown Source) - at pro.bg.a(Unknown Source) - at pro.M.a(Unknown Source) - at pro.bY.a(Unknown Source) - at pro.M.a(Unknown Source) - at pro.bo.a(Unknown Source) - at pro.bY.a(Unknown Source) - at pro.bY.a(Unknown Source) - at pro.P.a(Unknown Source) - at pro.p.a(Unknown Source) - at pro.bU.a(Unknown Source) - at pro.bo.a(Unknown Source) - at pro.J.a(Unknown Source) - at pro.I.a(Unknown Source) - at pro.J.a(Unknown Source) - at pro.cf.c(Unknown Source) - at pro.cf.a(Unknown Source) - at pro.bc.a(Unknown Source) - at proguard.ProGuard.a(Unknown Source) - at proguard.ProGuard.c(Unknown Source) - at proguard.ProGuard.b(Unknown Source) - at proguard.ProGuard.main(Unknown Source) -</pre> -<p> - -We can still use the same command to recover the stack trace: -<pre> -<b>java -jar retrace.jar proguard.map proguard.trace</b> -</pre> -<p> - -The output will now give a list of alternative original method names for each -ambiguous obfuscated method name: -<pre> -Exception in thread "main" java.lang.Error: Random exception - at proguard.shrink.UsageMarker.visitProgramClassFile(Unknown Source) - visitLibraryClassFile - visitProgramFieldInfo - visitProgramMethodInfo - visitMemberInfo - visitLibraryFieldInfo - visitLibraryMethodInfo - visitIntegerCpInfo - visitLongCpInfo - visitFloatCpInfo - visitDoubleCpInfo - visitStringCpInfo - visitUtf8CpInfo - visitFieldrefCpInfo - visitInterfaceMethodrefCpInfo - visitMethodrefCpInfo - visitClassCpInfo - visitNameAndTypeCpInfo - visitUnknownAttrInfo - visitInnerClassesAttrInfo - visitConstantValueAttrInfo - visitExceptionsAttrInfo - visitCodeAttrInfo - visitLineNumberTableAttrInfo - visitLocalVariableTableAttrInfo - visitSourceFileAttrInfo - visitDeprecatedAttrInfo - visitSyntheticAttrInfo - visitInstruction - visitCpInstruction - visitExceptionInfo - visitInnerClassesInfo - visitLocalVariableInfo - markCpEntry - markAsUnused - isUsed - at proguard.classfile.instruction.GenericInstruction.create(Unknown Source) - isWide - getLength - accept - at proguard.classfile.CodeAttrInfo.getAttribute(Unknown Source) - getAttrInfoLength - readInfo - accept - instructionsAccept - exceptionsAccept - [...] - at proguard.KeepCommand.executeShrinkingPhase(Unknown Source) - access$100 - at proguard.KeepCommand.keepField(Unknown Source) - ensureMultiClassFileVisitorForMembers - execute - executeObfuscationPhase - access$002 - access$000 - access$102 - access$108 - at proguard.CompoundCommand.addCommand(Unknown Source) - execute - at proguard.ProGuard.readCommands(Unknown Source) - obfuscate - executeCommands - at proguard.ProGuard.shrink(Unknown Source) - at proguard.ProGuard.check(Unknown Source) - execute - at proguard.ProGuard.main(Unknown Source) -</pre> - -<hr /> -<address> -Copyright © 2002-2014 -<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>. -</address> -</body> -</html> - |