Visual Studio从Exe导出符号

时间:2011-06-21 18:55:47

标签: visual-studio visual-c++ export exe symbols

我正在尝试从可执行文件中导出符号 - 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 ++ - 项目使用“空项目”模板并且未经修改......

1 个答案:

答案 0 :(得分:1)

Dumpbin使用.pdb文件提供更多信息。它包含调试信息,Visual Studio项目默认生成一个。您原来的手工编译版本没有创建.pdb。删除.pdb以获得相同的输出。