I'm looking for a way to determine programmatically what the arguments to a 
Win32 API implemented in Wine are.  I'm trying to implement an API redirection 
stub that I can use to trace calls into all of the Wine-implemented DLLs.  My 
stub needs to know what each argument passed into the Win32 API, their types 
and sizes, and whether they reside on the stack or register when calling the 
routine and finally their return value.  


In researching Wine, I have come to find out two tools, winedump and winebuild 
that may be helpful in doing this but I have yet to find out how to use them 
correctly to get the information  I seek.  Maybe they just don't have that 
capability or maybe I just haven't played with them enough to find all of its 
uses.

For example, I found that each DLL has a *.spec file which looks to have some 
of the info I need:

@ stdcall GetSystemTimeAsFileTime(ptr)


Looking at the man pages, this tells me that GetSystemTimeAsFileTime takes in 
an argument as a pointer but I don't see any return value information here.  
Also, does this file ever represent arguments passed by value on the stack, 
like a structure?  If so, does it capture how big the structure is?  What about 
function prototypes with variable arguments (similar to printf(...)).. are 
those capture in the file?  Can I also assume (based on the calling convention 
listed as stdcall) which arguments will be on registers and which will be on 
the stack? 


I know that the DWARF debug info can give me some of what I need but I would 
have to write a big parser for which I lack the time now.  Are there other 
tools that may make this easier if winedump and winebuild can't help me?

I know this is a lot to ask here but I'm just getting started with Wine and 
need to come up to speed very fast.  Thanks in advance for any help you can 
provide me.

Roger R. Cruz


Reply via email to