33// @category GeodeSDK
44
55import java .util .HashMap ;
6+ import java .util .List ;
67
7- import ghidra .program .model .symbol .Namespace ;
8- import ghidra .program .model .listing .GhidraClass ;
98import ghidra .app .util .NamespaceUtils ;
109import ghidra .app .script .GhidraScript ;
1110import ghidra .app .util .demangler .DemanglerUtil ;
1615import ghidra .program .model .mem .MemoryAccessException ;
1716import ghidra .util .exception .InvalidInputException ;
1817import ghidra .program .model .symbol .Symbol ;
19- import ghidra .program .model .symbol .SourceType ;
2018
2119public class FindVtablesScript extends GhidraScript {
2220 HashMap <Long , String > typeinfoNames = new HashMap <Long , String >();
@@ -104,7 +102,6 @@ private void populateTypeinfos() {
104102 try {
105103 // get the pointer value
106104 long offset = getLong (addr );
107- Address tiNamePtr = toAddr (offset );
108105 if (!typeinfoNames .containsKey (offset )) continue ;
109106
110107 typeinfos .put (addr .getOffset () - 8 , typeinfoNames .get (offset ));
@@ -124,7 +121,6 @@ private void populateVtables() {
124121 try {
125122 // get the pointer value
126123 long offset = getLong (addr );
127- Address tiPtr = toAddr (offset );
128124 if (!typeinfos .containsKey (offset )) continue ;
129125
130126 Address firstFunc = toAddr (getLong (addr .add (8 )));
@@ -149,9 +145,9 @@ private void createLabels() {
149145 // create the vtables
150146 for (Long offset : vtables .keySet ()) {
151147 String name = vtables .get (offset );
152- DemangledObject demangled = DemanglerUtil .demangle ("_ZTV" + name );
148+ List < DemangledObject > demangled = DemanglerUtil .demangle (currentProgram , "_ZTV" + name , null );
153149 try {
154- demangled .applyTo (currentProgram , toAddr (offset ), new DemanglerOptions (), monitor );
150+ demangled .get ( 0 ). applyTo (currentProgram , toAddr (offset ), new DemanglerOptions (), monitor );
155151 }
156152 catch (Exception e ) {
157153 continue ;
@@ -161,9 +157,9 @@ private void createLabels() {
161157 // create the typeinfos
162158 for (Long offset : typeinfos .keySet ()) {
163159 String name = typeinfos .get (offset );
164- DemangledObject demangled = DemanglerUtil .demangle ("_ZTI" + name );
160+ List < DemangledObject > demangled = DemanglerUtil .demangle (currentProgram , "_ZTI" + name , null );
165161 try {
166- demangled .applyTo (currentProgram , toAddr (offset ), new DemanglerOptions (), monitor );
162+ demangled .get ( 0 ). applyTo (currentProgram , toAddr (offset ), new DemanglerOptions (), monitor );
167163 }
168164 catch (Exception e ) {
169165 continue ;
@@ -173,9 +169,9 @@ private void createLabels() {
173169 // create the typeinfo names
174170 for (Long offset : typeinfoNames .keySet ()) {
175171 String name = typeinfoNames .get (offset );
176- DemangledObject demangled = DemanglerUtil .demangle ("_ZTS" + name );
172+ List < DemangledObject > demangled = DemanglerUtil .demangle (currentProgram , "_ZTS" + name , null );
177173 try {
178- demangled .applyTo (currentProgram , toAddr (offset ), new DemanglerOptions (), monitor );
174+ demangled .get ( 0 ). applyTo (currentProgram , toAddr (offset ), new DemanglerOptions (), monitor );
179175 }
180176 catch (Exception e ) {
181177 continue ;
0 commit comments