VS编译二进制文件中的符号

时间:2018-04-25 13:15:10

标签: c++ visual-studio binary symbols

我有以下问题: 是否可以在Visual Studio编译的C ++二进制文件中找到符号,或者只是存储在.pdb或.map文件中的符号?如果可以在二进制文件中找到它们,那么哪些设置可以确定符号是否存储在那里?

或者换句话说:二进制文件是否可以包含源代码的任何部分,无论是成员,函数还是其他任何部分。

由于

2 个答案:

答案 0 :(得分:1)

您可以选择何时构建是否将调试信息嵌入库而不是pdb - 请参阅Debug Information Format中的/ Z7。因此,如果您运送.libs或.objs,这可能是一个问题。当创建最终的exe / dll但是这些信息不会存在 - 它将被放入PDB。

将导出DLL导出的函数和变量,以便调用者可以找到它们。

使用__FUNCTION____FILE__宏的代码可能意味着这些值的字符串文字将位于最终可执行文件中的某个位置。这适用于代码中的所有其他字符串文字 - 它们将存在于某处。

除此之外,关于最终dll / exe中原始代码的信息不多。

答案 1 :(得分:1)

要在以Windows COFF格式构建的DLL,EXE,LIB或OBJ文件中查找符号,请使用dumpbin.exe实用程序,它通常包含在SDK或WDK中,或随VC ++一起提供

参考:https://docs.microsoft.com/en-us/cpp/build/reference/dumpbin-reference

例如,在简单exe上使用/ ALL选项运行它将生成.exe中的符号列表,以便从DLL中解析。在DLL上运行它将生成DLL导出的符号列表。

MSVCP140.dll
         140003080导入地址表
         140003AD0导入名称表
                 0时间日期戳
                 0第一个转发器参考索引

                 103 ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@M@Z                         
                 10C ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_K@Z                        
                 10D ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_N@Z                        
                 4C5 ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z                          
                 368 ?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@XZ                      
                 244 ?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ                            
                 4DE ?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHD@Z                         
                 4E1 ?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JPEBD_J@Z                   
                 2B4 ?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A                               
                 51F ?uncaught_exceptions@std@@YAHXZ                                                        

VCRUNTIME140.dll
         1400030D8导入地址表
         140003B28导入名称表
                 0时间日期戳
                 0第一个转发器参考索引

                  3E memset                                                                                 
                   8 __C_specific_handler                                                                   
                  23 __std_terminate                                                                        
                   E __CxxFrameHandler3