[gameprogrammer] Re: Pushing on stack in assembly

  • From: Kevin Jenkins <gameprogrammer@xxxxxxxxxx>
  • To: gameprogrammer@xxxxxxxxxxxxx
  • Date: Sat, 22 Mar 2008 11:38:24 -0700

Almost got my variadic RPC working. But pushing on the stack isn't working for me. If anyone knows assembly, can they tell me what I'm doing wrong?


char a=1;
unsigned long long e=5;

(I serialize this into an array in reverse order, and expand the char to 4 bytes)

-               out     0x0012fd0c ""        char [256]
                [0]     5 '?'   char
                [1]     0       char
                [2]     0       char
                [3]     0       char
                [4]     0       char
                [5]     0       char
                [6]     0       char
                [7]     0       char
                [8]     1 '?'   char
                [9]     0       char
                [10]    0       char
                [11]    0       char


I then push that array onto the stack, and do the function call. numBytes in this case is 12:

int loopCount = numBytes/4;
__asm
{
        // Allocate stack
        sub         esp,numBytes
        // Number of times to move MIN_FUNC_STACK_ALIGNMENT bytes
        mov         ecx,loopCount
        // Load variable source address for movsd instruction.
        lea         esi,stack
        // Load variable dest address
        mov         edi,esp
        // Copy data to stack, 4 bytes at a time, until ecx is 0
        rep movsd
        // Call function
        call            functionPtr
        // Deallocate stack
        add         esp,numBytes
}

Here's the function I'm calling:

void _cdecl func2(char a, unsigned long long e)
{
        // Test param injection, optional in parameter list
        printf("%i %i\n", a, (int) e);
}

---------------------
To unsubscribe go to http://gameprogrammer.com/mailinglist.html


Other related posts: