delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/1998/05/28/02:49:29

From: newsham AT lava DOT net (Tim Newsham)
Subject: dll question
28 May 1998 02:49:29 -0700 :
Message-ID: <m0yepeD-00117KC.cygnus.gnu-win32@malasada.lava.net>
Mime-Version: 1.0
To: gnu-win32 AT cygnus DOT com

Hi,

     I have a program which is trying to load a dll at runtime.  The
program uses LoadLibraryEx to load the library in, then uses GetProcAddress
to get addresses of various entry points (with appropriate cast operations).
This much seems to work properly.  I am having problems, however, when
I try to actually call one of the procedures.  The stack pointer (esp)
seems to be incorrect after a call to the procedure.  In particular
I am passing in 3 4-byte arguments (12 bytes).  The emitted code
looks like:

    <push args>
    call *%ebx
    addl %0xc, %esp

After the call, the stack pointer seems to be off by 12 bytes (too high).
Its as if the called procedure popped the arguments itself, leaving
the stack as it was prior to the caller pushing, and then the caller
also added 12 to the stack pointer to pop the values, after the function
returned.

Is this analysis correct?  If not, what is actually going on here?  If
so,  is there some way to tell the compiler that the callee will be
restoring the stack and that the caller shouldn't bother?

                                          Tim N.


-
For help on using this list (especially unsubscribing), send a message to
"gnu-win32-request AT cygnus DOT com" with one line of text: "help".

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019