如何在 IDA Pro 中创建识别通过引用传递的参数的函数原型
逆向工程
艾达
x86
调用约定
2021-06-24 07:28:00
1个回答
我的猜测是函数签名应该是这样的:
int __usercall Call_HTTP@<eax>(int x, int y, void* http_object@<edi>);
__usercall意味着函数的调用约定不是标准的(如 stdcall、cdecl 等),因为函数在堆栈上传递两个参数,在 edi 中传递一个参数。@<eax>: 函数在 eax 寄存器中返回一个值。int x并int y在堆栈上传递。void* http_object@<edi>: http_object 是通过 edi 寄存器传递的 void*。
您可以http_object通过将此对象的适当结构添加到已知 IDA 结构并传递实际类型而不是void*.
有关函数签名的更多信息,请参阅有关Set function/item type的 IDA 帮助。
编辑
正确的签名应该是:
int __userpurge Call_HTTP@<eax>(int x, int y, void* http_object@<edi>);
正如@itsbriany 所说:
- 对于
__stdcall和__userpurge调用约定,被调用者清理堆栈。 - 在
__cdecl和__usercall约定中,调用者清理堆栈。
其它你可能感兴趣的问题


