这也是在实验过程中遇到的小问题,简单记录一下。对于之前用过的这个例子:
ttps://github.com/grimm-co/GEARSHIFT/blob/trunk/examples/simple.c
如果我们不带debug info编译,那么运行下面这段代码:
import ghidra.app.script.GhidraScript;
import ghidra.program.model.listing.Function;
import ghidra.program.model.listing.FunctionIterator;
import ghidra.program.model.listing.Parameter;
public class ParameterCount extends GhidraScript {
public void run() throws Exception {
FunctionIterator functionManager = this.currentProgram.getFunctionManager().getFunctions(true);
for (Function function : functionManager) {
System.out.println(function.getName());
System.out.println(function.getParameterCount());
Parameter[] parameters=function.getParameters();
System.out.println("parameters length:"+parameters.length);
}
}
}
得到的结果是:
_init
1
parameters length:1
FUN_00101020
0
parameters length:0
malloc
1
parameters length:1
fill_pair
0
parameters length:0
rand
0
parameters length:0
__cxa_finalize
0
parameters length:0
deregister_tm_clones
0
parameters length:0
register_tm_clones
0
parameters length:0
__do_global_dtors_aux
0
parameters length:0
frame_dummy
0
parameters length:0
fill_pair
0
parameters length:0
initgrabbag
0
parameters length:0
_fini
0
parameters length:0
_ITM_deregisterTMCloneTable
0
parameters length:0
__gmon_start__
0
parameters length:0
malloc
1
parameters length:1
_ITM_registerTMCloneTable
0
parameters length:0
__cxa_finalize
0
parameters length:0
rand
0
parameters length:0
如果加上debug info,也就是编译的时候:
gcc -g -shared simple.c -O0 -o simple
得到的结果是:
_init
1
parameters length:1
FUN_00101020
0
parameters length:0
malloc
1
parameters length:1
fill_pair
1
parameters length:1
rand
0
parameters length:0
__cxa_finalize
0
parameters length:0
deregister_tm_clones
0
parameters length:0
register_tm_clones
0
parameters length:0
__do_global_dtors_aux
0
parameters length:0
frame_dummy
0
parameters length:0
fill_pair
1
parameters length:1
initgrabbag
1
parameters length:1
_fini
0
parameters length:0
_ITM_deregisterTMCloneTable
0
parameters length:0
__gmon_start__
0
parameters length:0
malloc
1
parameters length:1
_ITM_registerTMCloneTable
0
parameters length:0
__cxa_finalize
0
parameters length:0
rand
0
parameters length:0
仔细看看就能发现,像fill_pair这种function,只有存在debug info的时候,Ghidra才能正确判断其参数个数。这是个小问题,但却有可能在实验的时候引发错误,所以简单记录一下。