ghidra/Ghidra/Processors/JVM/data/languages/JVM.pspec

72 lines
2.5 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<processor_spec>
<properties>
<property key="DisableAllAnalyzers" value="value ignored, just turns them off"/>
<property key="Analyzers.Java Class Analyzer" value="true"/>
<property key="Analyzers.JVM Switch Analyzer" value="true"/>
<property key="pcodeInjectLibraryClass" value="ghidra.app.util.pcodeInject.PcodeInjectLibraryJava"/>
</properties>
<programcounter register="PC"/>
<register_data>
<register name="SP" group="Alt"/>
</register_data>
<inferptrbounds>
<range space="ram" first="0" last="0"/> <!-- Don't try to infer pointers from constants in the body of a function -->
</inferptrbounds>
<jumpassist name="switchAssist">
<!-- pcode to describe how to get case values from an index 0...size-1 -->
<case_pcode>
<input name="index" size="4"/>
<input name="opcodeAddr" size="4"/>
<input name="padding" size="1"/>
<input name="default" size="4"/>
<input name="npairs" size="4"/>
<output name="case" size="4"/>
<body><![CDATA[
case = *:4 (opcodeAddr + 1 + padding + 4 + 4 + 8*index);
]]></body>
</case_pcode>
<!-- pcode to describe how to get address values from the same index range -->
<addr_pcode>
<input name="index" size="4"/>
<input name="opcodeAddr" size="4"/>
<input name="padding" size="1"/>
<input name="default" size="4"/>
<input name="npairs" size="4"/>
<output name="addr" size="4"/>
<body><![CDATA[
_offset:4 = opcodeAddr + 1 + padding + 4 + 4 + 8*index + 4;
addr = opcodeAddr + *:4 (_offset);
]]></body>
</addr_pcode>
<!-- how to calculate the switch's default address -->
<default_pcode>
<input name="index" size="4"/>
<input name="opcodeAddr" size="4"/>
<input name="padding" size="1"/>
<input name="default" size="4"/>
<input name="npairs" size="4"/>
<output name="defaultAddress" size="4"/>
<body><![CDATA[
defaultAddress = default;
]]></body>
</default_pcode>
<!-- recovers the number of indices in the table -->
<size_pcode>
<input name="index" size="4"/>
<input name="opcodeAddr" size="4"/>
<input name="padding" size="1"/>
<input name="default" size="4"/>
<input name="npairs" size="4"/>
<output name="numIndices" size="4"/>
<body><![CDATA[
numIndices = npairs;
]]></body>
</size_pcode>
</jumpassist>
</processor_spec>