我试图从一个可执行文件导出符号--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++-项目使用“空项目”模板,是未经修改的…。
发布于 2011-06-21 21:26:57
Dumpbin使用.pdb文件提供更多信息。它包含调试信息,默认情况下,Visual项目会生成调试信息。您最初的手工编译版本没有创建.pdb。删除.pdb以获得相同的输出。
https://stackoverflow.com/questions/6430508
复制相似问题