Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

DLL export __stdcall without DEF file and decorated function names with VS

  1. If I have a DLL file...how can I see functions are built as __stdcall or __cdecl?
  2. I want to create a DLL to export functions as __stdcall without DEF file and decorated function names with Visual Studio like:
__declspec(dllexport) int __stdcall TestFunktion(void)
{
  return 0;
}

The result looks like this: enter image description here

Is there any easy way to create the functions without decoration without DEF file in Visual Studio?

like image 296
Aleksej Avatar asked Oct 23 '25 18:10

Aleksej


1 Answers

The standard approach to this problem is to define your export's undecorated name in a .def file - and this is the approach you should use.


But if for whatever reason you don't want to use a .def file, you can write code like:

__declspec(dllexport) int __stdcall TestFunktion(void)
{
    #pragma comment(linker, "/EXPORT:" __FUNCTION__ "=" __FUNCDNAME__)
    ...
}

__FUNCDNAME__ will evaluate to your decorated function name, while __FUNCTION__ will evaluate to your undecorated function name - this is effectively a replacement for the equivalent line in the .def file.


As for your other question:

If I have a DLL file...how can I see functions are built as __stdcall or __cdecl?

this is not strictly possible from the DLL alone, much less if you deliberately omit hints from the export table (i.e. you might be able to see a decorated export symbol and infer that it's __stdcall, but you're choosing to export them as undecorated symbols) - perhaps if you perform some sort of analysis on the function's disassembly and try to understand its calling convention, but this is non-hermetic and very hacky.

This is why well-documented calling conventions and well-documented API signatures are important.

like image 80
Daniel Kleinstein Avatar answered Oct 25 '25 10:10

Daniel Kleinstein



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!