My guess is that the function signature should be something like:
int __usercall Call_HTTP@<eax>(int x, int y, void* http_object@<edi>);
__usercall
means the calling convention for the function is not a standard one (like stdcall, cdecl, etc.) as the function passes two arguments on stack and one in edi.
@<eax>
: function returns a value in eax register.
int x
and int y
are passed on the stack.
void* http_object@<edi>
: http_object is a void* passed through the edi register.
You can change the type of the http_object
by adding a proper structure for this object to the known IDA structures and pass the real type instead of void*
.
For more information on function signature, see the IDA help on Set function/item type.
Edit
The right signature should be:
int __userpurge Call_HTTP@<eax>(int x, int y, void* http_object@<edi>);
As stated by @itsbriany:
- for
__stdcall
and __userpurge
calling conventions, the callee cleans up the stack.
- in
__cdecl
and __usercall
conventions, the caller cleans up the stack.