我正在尝试从可执行文件中导出符号 - exe的主要是交互式shell,而导出的符号为外部程序提供功能。
这是我目前的导出宏:
#define LIB_EXP extern "C" __declspec(dllexport) void __cdecl
导出的功能:
LIB_EXP Register() { /**/ }
如果我直接使用cl.exe - 没有任何开关 - 我得到以下符号表,看起来没问题:
00000000 characteristics
4E00E611 time date stamp Tue Jun 21 20:42:25 2011
0.00 version
1 ordinal base
1 number of functions
1 number of names
ordinal hint RVA name
1 0 00001000 Register
Summary
4000 .data
5000 .rdata
2000 .reloc
11000 .text
使用VS 2010进行编译会生成以下符号表:
00000000 characteristics
4E00E369 time date stamp Tue Jun 21 20:31:05 2011
0.00 version
1 ordinal base
1 number of functions
1 number of names
ordinal hint RVA name
1 0 00011005 Register = @ILT+0(_Register)
Summary
1000 .data
1000 .idata
3000 .rdata
1000 .reloc
1000 .rsrc
6000 .text
10000 .textbss
由于导入此exe的程序正在使用后期绑定,并且正在通过“GetProcAddress”查找导出的函数,因此我依赖于与指定完全相同的函数名称。 有谁知道这个混乱的地方“ = @ ILT + 0(_Register)”有点看起来像名字变形来自我如何摆脱它? VS-C ++ - 项目使用“空项目”模板并且未经修改......
答案 0 :(得分:1)
Dumpbin使用.pdb文件提供更多信息。它包含调试信息,Visual Studio项目默认生成一个。您原来的手工编译版本没有创建.pdb。删除.pdb以获得相同的输出。