, DATA DLL (DLL, ).
, , DllDataForward.c:
#include <Windows.h>
EXTERN_C __declspec(dllexport) int myData = 5;
#ifndef _DEBUG
EXTERN_C BOOL WINAPI _DllMainCRTStartup (HINSTANCE hinstDLL, DWORD fdwReason,
LPVOID lpvReserved)
#else
BOOL WINAPI DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
#endif
{
if (fdwReason == DLL_PROCESS_ATTACH)
DisableThreadLibraryCalls(hinstDLL);
return TRUE;
UNREFERENCED_PARAMETER (lpvReserved);
}
EXTERN_C __declspec(dllexport) BOOL WINAPI MyFunc()
{
return TRUE;
}
DllDataForward.def:
LIBRARY "DllDataForward"
EXPORTS
myData
MyFunc
"myData DATA" "myData".
ForwardingDll.c:
#include <Windows.h>
#ifndef _DEBUG
EXTERN_C BOOL WINAPI _DllMainCRTStartup (HINSTANCE hinstDLL, DWORD fdwReason,
LPVOID lpvReserved)
#else
BOOL WINAPI DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
#endif
{
if (fdwReason == DLL_PROCESS_ATTACH)
DisableThreadLibraryCalls(hinstDLL);
return TRUE;
UNREFERENCED_PARAMETER (lpvReserved);
}
ForwardingDll.def:
LIBRARY "ForwardingDll"
EXPORTS
myNewData=DllDataForward.myData DATA
MyNewFunc=DllDataForward.MyFunc
DllDataForward.lib, DllDataForward ForwardingDll.dll. , ForwardingDll.dll.
dumpbin.exe ForwardingDll.dll /EXPORTS
...
ordinal hint RVA name
1 0 MyNewFunc (forwarded to DllDataForward.MyFunc)
2 1 myNewData (forwarded to DllDataForward.myData)
...
DllDataForward.lib, test.c:
#include <Windows.h>
#include <stdio.h>
#include <tchar.h>
EXTERN_C __declspec(dllimport) int myNewData;
EXTERN_C __declspec(dllimport) BOOL WINAPI MyNewFunc();
int main()
{
BOOL isSuccess = MyNewFunc();
int i=myNewData;
_tprintf (TEXT("i=%d\nisSuccess=%s\n"),
i, isSuccess? TEXT("TRUE"): TEXT("FALSE"));
}
i=5
isSuccess=TRUE
. "myData DATA" "myData" DEF , DLL, python32.dll - python32.dll . , python32.lib , PyBaseObject_Type. , python32.lib, , .
, "myData DATA" "myData" DEF. DllDataForward.dll DEF, "myData DATA" , DllDataForward.LIB:
dumpbin.exe DllDataForward.lib /all >%TEMP%\DllDataForward-lib.txt
notepad %TEMP%\DllDataForward-lib.txt
, lib 6 :
224 __IMPORT_DESCRIPTOR_DllDataForward
46A __NULL_IMPORT_DESCRIPTOR
5A8 DllDataForward_NULL_THUNK_DATA
776 __imp__myData
708 _MyFunc@0
708 __imp__MyFunc@0
DEF "myData DATA" "myData", dll . , 7 (!!!) 6 :
23A __IMPORT_DESCRIPTOR_DllDataForward
480 __NULL_IMPORT_DESCRIPTOR
5BE DllDataForward_NULL_THUNK_DATA
78C __imp__myData
78C _myData
71E _MyFunc@0
71E __imp__MyFunc@0
, DEF "myData DATA" , _myData.
DLL, "myData DATA" , , _myData . DllDataForward.dll, lib .
, DllDataForward.dll dumpbin.exe DllDataForward.dll /exports. :
...
ordinal hint RVA name
1 0 00001020 MyFunc = _MyFunc@0
2 1 00003000 myData = _myData
...
new DllDataForward.def , dumpbin.exe DllDataForward.dll /exports:
LIBRARY "DllDataForward"
EXPORTS
myData = _myData
,
lib.exe /DEF:DllDataForward.def /OUT:DllDataForward.lib /MACHINE:X86
DllDataForward.lib ( - DllDataForward.lib). ForwardingDll.dll DllDataForward.lib DLL. Test.exe , .
python32.lib 3.2a3:
dumpbin.exe "C:\Program Files\Python32\libs\python32.lib" /all >python32-lib.txt
notepad python32-lib.txt
( )
1957 public symbols
…
1BCCC _PyArg_Parse
1BCCC __imp__PyArg_Parse
…
1BFF6 __imp__PyBaseObject_Type
…
dumpbin C:\Windows\system32\python32.dll /exports >%TEMP%\python32-exports.txt
notepad %TEMP%\python32-exports.txt
PyBaseObject_Type
14 D 001DD5D0 PyBaseObject_Type
, python32.lib python32.def
LIBRARY "python32"
EXPORTS
PyBaseObject_Type
lib /DEF:python32.def /OUT:python32.lib /MACHINE:X86
DEF DLL
LIBRARY "python3"
EXPORTS
PyArg_Parse=python32.PyArg_Parse
PyArg_ParseTuple=python32.PyArg_ParseTuple
PyArg_ParseTupleAndKeywords=python32.PyArg_ParseTupleAndKeywords
PyBaseObject_Type=python32.PyBaseObject_Type DATA
, , "C:\Program Files\Python32\libs\python32.lib" python32.lib, .
python PyBaseObject_Type, int
EXTERN_C __declspec(dllimport) int PyBaseObject_Type;
, PyBaseObject_Type 1. !
, .