我已经确定了一个与 ARM64 二进制文件中的 printf 完全一样的例程。参数以标准方式传递(例如 X0、X1、X2 ...),并且我已经为函数提供了以下签名 (Y):
int printf(char* fmt, ...)
这有时会做“正确的事情”,但不是很频繁。通常它会错过第二个参数之后的任何参数。
有没有办法告诉 HexRays 更多关于这个例程的信息,以便它“做正确的事”并正确显示数据?例如,其中一行实际上是:
printf("%s: %s: foo: 0x%llx, bar: 0x%llx, baz: %u\n", "function_name");
当它应该有更多参数时,如格式字符串所示(并且在调用之前立即加载到寄存器中)。