例如,我有一个函数签名
undefined HAL_TIMEx_OnePulseN_Stop_IT(void)
,由上述链接的答案给出,而在反编译文件中(取自运行ghidra提供的Decompile.java脚本),我将它的签名称为undefined4 HAL_TIMEx_OnePulseN_Stop_IT(uint **param_1,uint param_2)
,我相信当我与二进制的实际来源进行交叉核对时,会更加准确。 这种不一致的原因是什么?无论如何,我可以反编译版本的形式获取函数参数吗?我试图使用
DecompInterface
,但是我无法找出提取原型的方式,就像它们处于反编译版本一样。抱歉,我是一个初学者,刚开始与Ghidra合作。感谢您的时间。 #1 楼
所以,我找出了原因。默认情况下,当ghidra在加载二进制文件时要求提供选项时,Decompiler Parameter ID
选项被禁用。启用后,将正确具有功能参数。启用此选项后,将需要更长的时间进行分析。 #2 楼
您注意到Decompiler Parameter ID
可以解决这一差异,但是我怀疑相关逻辑是上下文菜单操作Commit Params/Return
背后的逻辑。Ghidra Advanced Class幻灯片状态:
反编译器参数ID
反编译器参数ID分析器(分析→一个
Shot→反编译器参数ID)使用反编译器
和对调用树的探索来确定参数,
返回类型,并在程序中调用有关
函数的约定信息。当您具有一些丰富的类型信息(例如,来自库调用的已知
类型)时,此分析器可能非常有用。但是,如果您过早或在解决问题之前也运行此分析器,则可能会在整个程序中传播错误信息。每个功能的功能。
(强调我的)