|
18 | 18 | import java.io.File; |
19 | 19 | import java.io.FileWriter; |
20 | 20 | import java.io.IOException; |
| 21 | +import java.util.ArrayList; |
| 22 | +import java.util.List; |
| 23 | + |
21 | 24 | import ghidra.app.cmd.function.CreateFunctionCmd; |
22 | 25 | import ghidra.app.services.AbstractAnalyzer; |
23 | 26 | import ghidra.app.services.AnalyzerType; |
|
27 | 30 | import ghidra.program.model.address.AddressSetView; |
28 | 31 | import ghidra.program.model.listing.Data; |
29 | 32 | import ghidra.program.model.listing.Function; |
| 33 | +import ghidra.program.model.listing.Function.FunctionUpdateType; |
30 | 34 | import ghidra.program.model.listing.Listing; |
31 | 35 | import ghidra.program.model.listing.Parameter; |
32 | 36 | import ghidra.program.model.listing.ParameterImpl; |
@@ -226,18 +230,22 @@ void modify_function(Program program, long func_addr_value, int args_num) { |
226 | 230 | } |
227 | 231 |
|
228 | 232 | 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 | + List<Parameter> new_params=new ArrayList<>(); |
| 234 | + for(int i=0;i<args_num/get_pointer_size(program);i++) { |
| 235 | + if(i<func.getParameterCount()) { |
| 236 | + new_params.add(func.getParameter(i)); |
233 | 237 | }else { |
234 | | - param=new ParameterImpl(String.format("param_%d", i+1), new Undefined4DataType(), func.getProgram()); |
| 238 | + Parameter param=null; |
| 239 | + if(get_pointer_size(program)==8) { |
| 240 | + param=new ParameterImpl(String.format("param_%d", i+1), new Undefined8DataType(), func.getProgram()); |
| 241 | + }else { |
| 242 | + param=new ParameterImpl(String.format("param_%d", i+1), new Undefined4DataType(), func.getProgram()); |
| 243 | + } |
| 244 | + new_params.add(param); |
235 | 245 | } |
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 | 246 | } |
| 247 | + |
| 248 | + func.updateFunction(null, null, new_params, FunctionUpdateType.DYNAMIC_STORAGE_ALL_PARAMS, true, SourceType.ANALYSIS); |
241 | 249 | }catch(Exception e) { |
242 | 250 | } |
243 | 251 | } |
|
0 commit comments