[gameprogrammer] How to call function with parameters on stack
- From: Kevin Jenkins <gameprogrammer@xxxxxxxxxx>
- To: gameprogrammer@xxxxxxxxxxxxx
- Date: Sun, 23 Mar 2008 21:41:24 -0700
Regarding the previous posts, I finally figured it how to push
arbitrary function parameters on the stack, and call a function on
another system with those parameters. If anyone is interested:
http://www.rakkar.org/sourcecode/PureRPC.html
I have the working solution inside RakNet
Header:
http://raknetjenkinsso.svn.sourceforge.net/viewvc/raknetjenkinsso/trunk/Source/AutoRPC.h?revision=100&view=markup
Source:
http://raknetjenkinsso.svn.sourceforge.net/viewvc/raknetjenkinsso/trunk/Source/AutoRPC.cpp?revision=102&view=markup
Only prob. right now is that I don't know how to do the equivalent
assembly on Linux, so I have an #ifdef _WIN32 there
void AutoRPC::CallWithStack(const char *inputStack, unsigned int
numBytes, void *functionPtr, void *lastParam, void *thisPtr)
{
const int loopCount = numBytes/MIN_FUNC_STACK_ALIGNMENT;
#ifdef _WIN32
ASSEMBLY_BLOCK
{
// Push lastParam
push lastParam
// Allocate data stack
sub esp,numBytes
// Number of times to move MIN_FUNC_STACK_ALIGNMENT bytes
mov ecx,loopCount
// source is esi
mov esi,inputStack
// destination is esp, stored in edi
mov edi,esp
// Copy data to function stack, until ecx is 0
rep movs dword ptr es:[edi],dword ptr [esi]
// Push this pointer if not 0
cmp thisPtr,0
// If passed thisPtr, do a class member call.
je no_this_ptr
push thisPtr
call functionPtr
pop thisPtr
jmp done
no_this_ptr:
// Regular C call
call functionPtr
done:
add esp,numBytes
pop lastParam
}
#endif
}
---------------------
To unsubscribe go to http://gameprogrammer.com/mailinglist.html
Other related posts:
- » [gameprogrammer] How to call function with parameters on stack