Skip to content

Commit b87ce94

Browse files
Add the function to modify the argument
1 parent d12f170 commit b87ce94

File tree

1 file changed

+31
-3
lines changed

1 file changed

+31
-3
lines changed

src/main/java/golanganalyzerextension/GolangAnalyzerExtensionAnalyzer.java

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,18 @@
1818
import java.io.File;
1919
import java.io.FileWriter;
2020
import java.io.IOException;
21-
2221
import ghidra.app.cmd.function.CreateFunctionCmd;
2322
import ghidra.app.services.AbstractAnalyzer;
2423
import ghidra.app.services.AnalyzerType;
2524
import ghidra.app.util.importer.MessageLog;
2625
import ghidra.framework.options.Options;
2726
import ghidra.program.model.address.Address;
2827
import ghidra.program.model.address.AddressSetView;
29-
import ghidra.program.model.data.StringDataType;
3028
import ghidra.program.model.listing.Data;
3129
import ghidra.program.model.listing.Function;
3230
import ghidra.program.model.listing.Listing;
31+
import ghidra.program.model.listing.Parameter;
32+
import ghidra.program.model.listing.ParameterImpl;
3333
import ghidra.program.model.listing.Program;
3434
import ghidra.program.model.mem.Memory;
3535
import ghidra.program.model.mem.MemoryAccessException;
@@ -40,7 +40,7 @@
4040
import ghidra.util.exception.DuplicateNameException;
4141
import ghidra.util.exception.InvalidInputException;
4242
import ghidra.util.task.TaskMonitor;
43-
import ghidra.program.model.lang.LanguageID;
43+
import ghidra.program.model.data.*;
4444

4545
/**
4646
* TODO: Provide class-level documentation that describes what this analyzer does.
@@ -130,6 +130,7 @@ public boolean added(Program program, AddressSetView set, TaskMonitor monitor, M
130130
}
131131

132132
rename_function(program, monitor, func_addr_value, func_name);
133+
modify_function(program, func_addr_value, args);
133134
}catch(Exception e) {
134135
log.appendException(e);
135136
}
@@ -213,4 +214,31 @@ void rename_function(Program program, TaskMonitor monitor, long func_addr_value,
213214
}
214215
func.setName(func_name, SourceType.ANALYSIS);
215216
}
217+
218+
void modify_function(Program program, long func_addr_value, int args_num) {
219+
Address func_addr=program.getAddressFactory().getDefaultAddressSpace().getAddress(func_addr_value);
220+
Function func=program.getFunctionManager().getFunctionAt(func_addr);
221+
if(func==null) {
222+
return;
223+
}
224+
if(func.getParameterCount()==args_num/get_pointer_size(program)) {
225+
return;
226+
}
227+
228+
try {
229+
for(int i=func.getAutoParameterCount();i<args_num/get_pointer_size(program);i++) {
230+
ParameterImpl param=null;
231+
if(get_pointer_size(program)==8) {
232+
param=new ParameterImpl(String.format("param_%d", i+1), new Undefined8DataType(), func.getProgram());
233+
}else {
234+
param=new ParameterImpl(String.format("param_%d", i+1), new Undefined4DataType(), func.getProgram());
235+
}
236+
func.addParameter(param, SourceType.USER_DEFINED);
237+
}
238+
for(int i=func.getAutoParameterCount();i>args_num/get_pointer_size(program);i--) {
239+
func.removeParameter(i-1);
240+
}
241+
}catch(Exception e) {
242+
}
243+
}
216244
}

0 commit comments

Comments
 (0)