Символы в VS-скомпилированных двоичных файлах - PullRequest
0 голосов
/ 25 апреля 2018

У меня следующий вопрос: возможно ли найти символы в скомпилированном двоичном коде C ++ Visual Studio или символы хранятся только в файлах .pdb или .map?Если они могут быть найдены в двоичном файле, какие настройки определяют, хранятся ли там символы?

Или, другими словами: возможно ли, чтобы двоичный файл содержал какую-либо часть исходного кода, будь то члены,функции или что-нибудь.

Спасибо

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Чтобы найти символы в файлах DLL, EXE, LIB или OBJ, собранных в формате Windows COFF, используйте утилиту dumpbin.exe, обычно она входит в SDK или WDK или поставляется с VC ++

Ссылка: https://docs.microsoft.com/en-us/cpp/build/reference/dumpbin-reference

Например, если запустить его с параметром / ALL в простом exe-файле, будет получен список символов в .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                                                                     
0 голосов
/ 25 апреля 2018

Вы можете выбрать при сборке встраивать отладочную информацию в библиотеку вместо pdb - см. / Z7 в Формат отладочной информации . Так что если вы отправляете .libs или .objs, это может быть проблемой. Однако, когда будет создан последний exe / dll, этой информации там не будет - она ​​будет помещена в PDB.

Будут названы экспортированные функции DLL и переменные, чтобы вызывающие абоненты могли их найти.

Код, использующий макросы __FUNCTION__ и __FILE__, вероятно, будет означать, что строковые литералы для этих значений будут где-то в конечном исполняемом файле. Это относится ко всем другим строковым литералам в коде - они будут где-то там.

Кроме этого, в окончательной версии dll / exe не будет много информации об исходном коде.

...