Skip to content

Commit a9e7cee

Browse files
committed
initial commint
0 parents  commit a9e7cee

28 files changed

+1539
-0
lines changed

.gitignore

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
bin/
2+
.settings/
3+
.project/
4+
.antProperties.xml
5+
.classpath

.project

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<projectDescription>
3+
<name>gotools</name>
4+
<comment></comment>
5+
<projects>
6+
</projects>
7+
<buildSpec>
8+
<buildCommand>
9+
<name>org.eclipse.jdt.core.javabuilder</name>
10+
<arguments>
11+
</arguments>
12+
</buildCommand>
13+
</buildSpec>
14+
<natures>
15+
<nature>org.eclipse.jdt.core.javanature</nature>
16+
</natures>
17+
<linkedResources>
18+
<link>
19+
<name>Ghidra</name>
20+
<type>2</type>
21+
<location>/Users/felber/ctf/ghidra_9.0.1</location>
22+
</link>
23+
</linkedResources>
24+
</projectDescription>

Module.manifest

Whitespace-only changes.

build.gradle

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Builds a Ghidra Extension for a given Ghidra installation.
2+
//
3+
// An absolute path to the Ghidra installation directory must be supplied either by setting the
4+
// GHIDRA_INSTALL_DIR environment variable or Gradle project property:
5+
//
6+
// > export GHIDRA_INSTALL_DIR=<Absolute path to Ghidra>
7+
// > gradle
8+
//
9+
// or
10+
//
11+
// > gradle -PGHIDRA_INSTALL_DIR=<Absolute path to Ghidra>
12+
//
13+
// Gradle should be invoked from the directory of the project to build. Please see the
14+
// application.gradle.version property in <GHIDRA_INSTALL_DIR>/Ghidra/application.properties
15+
// for the correction version of Gradle to use for the Ghidra installation you specify.
16+
17+
//----------------------START "DO NOT MODIFY" SECTION------------------------------
18+
def ghidraInstallDir
19+
20+
if (System.env.GHIDRA_INSTALL_DIR) {
21+
ghidraInstallDir = System.env.GHIDRA_INSTALL_DIR
22+
}
23+
else if (project.hasProperty("GHIDRA_INSTALL_DIR")) {
24+
ghidraInstallDir = project.getProperty("GHIDRA_INSTALL_DIR")
25+
}
26+
27+
if (ghidraInstallDir) {
28+
apply from: new File(ghidraInstallDir).getCanonicalPath() + "/support/buildExtension.gradle"
29+
}
30+
else {
31+
throw new GradleException("GHIDRA_INSTALL_DIR is not defined!")
32+
}
33+
//----------------------END "DO NOT MODIFY" SECTION-------------------------------

data/README.txt

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
The "data" directory is intended to hold data files that will be used by this module and will
2+
not end up in the .jar file, but will be present in the zip or tar file. Typically, data
3+
files are placed here rather than in the resources directory if the user may need to edit them.
4+
5+
An optional data/languages directory can exist for the purpose of containing various Sleigh language
6+
specification files and importer opinion files.
7+
8+
The data/build.xml is used for building the contents of the data/languages directory.
9+
10+
The skel language definition has been commented-out within the skel.ldefs file so that the
11+
skeleton language does not show-up within Ghidra.
12+
13+
See the Sleigh language documentation (docs/languages/sleigh.htm or sleigh.pdf) for details
14+
on Sleigh language specification syntax.
15+

data/build.xml

+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<!--
4+
+ Compile sleigh languages within this module.
5+
+ Eclipse: right-click on this file and choose menu item "Run As->Ant Build"
6+
+ From command line (requires ant install)
7+
+ - cd to data directory containing this file
8+
+ - run ant
9+
-->
10+
11+
<project name="privateBuildDeveloper" default="sleighCompile">
12+
13+
<property name="sleigh.compile.class" value="ghidra.pcodeCPort.slgh_compile.SleighCompile"/>
14+
15+
<property name="repo.dir" value="../../../.." />
16+
<property name="repo.marker.dir" value="${repo.dir}/.git" />
17+
18+
<!--Import optional ant properties. GhidraDev Eclipse plugin produces this so this file can find the Ghidra installation-->
19+
<import file="../.antProperties.xml" optional="true" />
20+
21+
<condition property="devmode">
22+
<available file="${repo.marker.dir}" type="dir" />
23+
</condition>
24+
25+
<target name="buildSleighClasspathDev" if="devmode">
26+
27+
<property name="framework.path" value="${repo.dir}/../ghidra.git/Ghidra/Framework"/>
28+
<property name="libs.path" value="${repo.dir}/../ghidra.bin.git/ExternalLibraries/libsForRuntime"/>
29+
30+
<path id="sleigh.class.path">
31+
<pathelement location="${framework.path}/SoftwareModeling/bin"/>
32+
<pathelement location="${framework.path}/Generic/bin"/>
33+
<pathelement location="${framework.path}/Utility/bin"/>
34+
<fileset dir="${libs.path}">
35+
<include name="*.jar"/>
36+
</fileset>
37+
</path>
38+
39+
<available classname="${sleigh.compile.class}" classpathref="sleigh.class.path" property="sleigh.compile.exists"/>
40+
41+
</target>
42+
43+
<target name="buildSleighClasspathDist" unless="devmode">
44+
45+
<!-- If language module is detached from installation, get Ghidra installation directory path from imported properties -->
46+
<condition property="framework.path" value="${ghidra.install.dir}/Ghidra/Framework" else="../../../Framework">
47+
<available file="${ghidra.install.dir}" type="dir" />
48+
</condition>
49+
50+
<path id="sleigh.class.path">
51+
<fileset dir="${framework.path}/SoftwareModeling/lib">
52+
<include name="*.jar"/>
53+
</fileset>
54+
<fileset dir="${framework.path}/Generic/lib">
55+
<include name="*.jar"/>
56+
</fileset>
57+
<fileset dir="${framework.path}/Utility/lib">
58+
<include name="*.jar"/>
59+
</fileset>
60+
</path>
61+
<available classname="${sleigh.compile.class}" classpathref="sleigh.class.path" property="sleigh.compile.exists"/>
62+
63+
</target>
64+
65+
<target name="sleighCompile" depends="buildSleighClasspathDist, buildSleighClasspathDev">
66+
67+
<fail unless="sleigh.compile.exists" />
68+
69+
<java classname="${sleigh.compile.class}"
70+
classpathref="sleigh.class.path"
71+
fork="true"
72+
failonerror="true">
73+
<jvmarg value="-Xmx2048M"/>
74+
<arg value="-a"/>
75+
<arg value="./languages"/>
76+
</java>
77+
78+
</target>
79+
80+
</project>

data/languages/golang.ldefs

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<!-- See Relax specification: Ghidra/Framework/SoftwareModeling/data/languages/language_definitions.rxg -->
4+
<language_definitions>
5+
<language processor="x86"
6+
endian="little"
7+
size="64"
8+
variant="default"
9+
version="1.0"
10+
slafile="x86-64.sla"
11+
processorspec="x86-64.pspec"
12+
manualindexfile="../manuals/x86.idx"
13+
id="x86:LE:64:golang">
14+
<description>Go Language Module</description>
15+
<compiler name="go1.12" spec="golang1.12.cspec" id="default"/>
16+
</language>
17+
</language_definitions>

data/languages/golang1.12.cspec

+214
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,214 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<!-- See Relax specification: Ghidra/Framework/SoftwareModeling/data/languages/compiler_spec.rxg
4+
5+
felber: copied from Ghidra/Processors/x86/data/languages/x86-64-gcc.cspec
6+
-->
7+
8+
<compiler_spec>
9+
<data_organization>
10+
<absolute_max_alignment value="0" />
11+
<machine_alignment value="2" />
12+
<default_alignment value="1" />
13+
<default_pointer_alignment value="8" />
14+
<pointer_size value="8" />
15+
<wchar_size value="4" />
16+
<short_size value="2" />
17+
<integer_size value="4" />
18+
<long_size value="8" />
19+
<long_long_size value="8" />
20+
<float_size value="4" />
21+
<double_size value="8" />
22+
<long_double_size value="16" />
23+
<size_alignment_map>
24+
<entry size="1" alignment="1" />
25+
<entry size="2" alignment="2" />
26+
<entry size="4" alignment="4" />
27+
<entry size="8" alignment="8" />
28+
</size_alignment_map>
29+
</data_organization>
30+
31+
<global>
32+
<range space="ram"/>
33+
</global>
34+
<stackpointer register="RSP" space="ram"/>
35+
<default_proto>
36+
<prototype name="go__stdcall" extrapop="8" stackshift="8">
37+
<!-- felber -->
38+
<input>
39+
<pentry minsize="1" maxsize="8" align="8">
40+
<addr offset="8" space="stack"/>
41+
</pentry>
42+
<pentry minsize="1" maxsize="8" align="8">
43+
<addr offset="16" space="stack"/>
44+
</pentry>
45+
<pentry minsize="1" maxsize="8" align="8">
46+
<addr offset="24" space="stack"/>
47+
</pentry>
48+
<pentry minsize="1" maxsize="8" align="8">
49+
<addr offset="32" space="stack"/>
50+
</pentry>
51+
<pentry minsize="1" maxsize="8" align="8">
52+
<addr offset="40" space="stack"/>
53+
</pentry>
54+
<pentry minsize="1" maxsize="8" align="8">
55+
<addr offset="48" space="stack"/>
56+
</pentry>
57+
<pentry minsize="1" maxsize="8" align="8">
58+
<addr offset="56" space="stack"/>
59+
</pentry>
60+
<pentry minsize="1" maxsize="8" align="8">
61+
<addr offset="64" space="stack"/>
62+
</pentry>
63+
<pentry minsize="1" maxsize="8" align="8">
64+
<addr offset="72" space="stack"/>
65+
</pentry>
66+
<pentry minsize="1" maxsize="8" align="8">
67+
<addr offset="8" space="stack"/>
68+
</pentry>
69+
</input>
70+
<output killedbycall="true">
71+
<pentry minsize="1" maxsize="64" align="8">
72+
<addr offset="-24" space="stack"/>
73+
</pentry>
74+
</output>
75+
<!-- <killedbycall>
76+
TODO felber
77+
</killedbycall>-->
78+
<unaffected>
79+
<!-- TODO felber -->
80+
<register name="RSP"/>
81+
<register name="RBP"/>
82+
</unaffected>
83+
</prototype>
84+
</default_proto>
85+
<prototype name="__stdcall" extrapop="8" stackshift="8">
86+
<!-- Derived from "System V Application Binary Interface AMD64 Architecture Processor Supplement" April 2016 -->
87+
<input>
88+
<pentry minsize="4" maxsize="16" metatype="float">
89+
<register name="XMM0"/>
90+
</pentry>
91+
<pentry minsize="4" maxsize="16" metatype="float">
92+
<register name="XMM1"/>
93+
</pentry>
94+
<pentry minsize="4" maxsize="16" metatype="float">
95+
<register name="XMM2"/>
96+
</pentry>
97+
<pentry minsize="4" maxsize="16" metatype="float">
98+
<register name="XMM3"/>
99+
</pentry>
100+
<pentry minsize="4" maxsize="16" metatype="float">
101+
<register name="XMM4"/>
102+
</pentry>
103+
<pentry minsize="4" maxsize="16" metatype="float">
104+
<register name="XMM5"/>
105+
</pentry>
106+
<pentry minsize="4" maxsize="16" metatype="float">
107+
<register name="XMM6"/>
108+
</pentry>
109+
<pentry minsize="4" maxsize="16" metatype="float">
110+
<register name="XMM7"/>
111+
</pentry>
112+
<pentry minsize="1" maxsize="8">
113+
<register name="RDI"/>
114+
</pentry>
115+
<pentry minsize="1" maxsize="8">
116+
<register name="RSI"/>
117+
</pentry>
118+
<pentry minsize="1" maxsize="8">
119+
<register name="RDX"/>
120+
</pentry>
121+
<pentry minsize="1" maxsize="8">
122+
<register name="RCX"/>
123+
</pentry>
124+
<pentry minsize="1" maxsize="8">
125+
<register name="R8"/>
126+
</pentry>
127+
<pentry minsize="1" maxsize="8">
128+
<register name="R9"/>
129+
</pentry>
130+
<pentry minsize="1" maxsize="500" align="8">
131+
<addr offset="8" space="stack"/>
132+
</pentry>
133+
</input>
134+
<output killedbycall="true">
135+
<pentry minsize="4" maxsize="16" metatype="float">
136+
<register name="XMM0"/>
137+
</pentry>
138+
<pentry minsize="1" maxsize="8">
139+
<register name="RAX"/>
140+
</pentry>
141+
<pentry minsize="9" maxsize="16">
142+
<addr space="join" piece1="RDX" piece2="RAX"/>
143+
</pentry>
144+
</output>
145+
<killedbycall>
146+
<register name="RDX"/>
147+
</killedbycall>
148+
<unaffected>
149+
<register name="RBX"/>
150+
<register name="RSP"/>
151+
<register name="RBP"/>
152+
<register name="R12"/>
153+
<register name="R13"/>
154+
<register name="R14"/>
155+
<register name="R15"/>
156+
</unaffected>
157+
</prototype>
158+
<prototype name="MSABI" extrapop="8" stackshift="8">
159+
<input pointermax="8">
160+
<pentry minsize="4" maxsize="8" metatype="float">
161+
<register name="XMM0_Qa"/>
162+
</pentry>
163+
<pentry minsize="4" maxsize="8" metatype="float">
164+
<register name="XMM1_Qa"/>
165+
</pentry>
166+
<pentry minsize="4" maxsize="8" metatype="float">
167+
<register name="XMM2_Qa"/>
168+
</pentry>
169+
<pentry minsize="4" maxsize="8" metatype="float">
170+
<register name="XMM3_Qa"/>
171+
</pentry>
172+
<pentry minsize="1" maxsize="8">
173+
<register name="RCX"/>
174+
</pentry>
175+
<pentry minsize="1" maxsize="8">
176+
<register name="RDX"/>
177+
</pentry>
178+
<pentry minsize="1" maxsize="8">
179+
<register name="R8"/>
180+
</pentry>
181+
<pentry minsize="1" maxsize="8">
182+
<register name="R9"/>
183+
</pentry>
184+
<pentry minsize="1" maxsize="500" align="8">
185+
<addr offset="40" space="stack"/>
186+
</pentry>
187+
</input>
188+
<output killedbycall="true">
189+
<pentry minsize="4" maxsize="8" metatype="float">
190+
<register name="XMM0_Qa"/>
191+
</pentry>
192+
<pentry minsize="1" maxsize="8">
193+
<register name="RAX"/>
194+
</pentry>
195+
</output>
196+
<unaffected>
197+
<varnode space="ram" offset="0" size="8"/>
198+
<register name="RBX"/>
199+
<register name="RBP"/>
200+
<register name="RDI"/>
201+
<register name="RSI"/>
202+
<register name="RSP"/>
203+
<register name="R12"/>
204+
<register name="R13"/>
205+
<register name="R14"/>
206+
<register name="R15"/>
207+
<register name="DF"/>
208+
</unaffected>
209+
<localrange>
210+
<range space="stack" first="0xfffffffffff0bdc1" last="0xffffffffffffffff"/>
211+
<range space="stack" first="8" last="39"/>
212+
</localrange>
213+
</prototype>
214+
</compiler_spec>

0 commit comments

Comments
 (0)