Ghidra Java API打印函数参数时的问题

这也是在实验过程中遇到的小问题,简单记录一下。对于之前用过的这个例子:

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才能正确判断其参数个数。这是个小问题,但却有可能在实验的时候引发错误,所以简单记录一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值