Функциональные символы в windows могут быть выполнены - PullRequest
1 голос
/ 06 апреля 2020

Я хочу получить список с искаженными именами всех функций исполняемого для некоторого внешнего анализа.

На Linux это простая задача. Мне просто нужно скомпилировать как обычно и запустить nm, чтобы получить список с искаженными именами.

$ nm test    
                 U _GLOBAL_OFFSET_TABLE_
                 U printf
                 U __stack_chk_fail
0000000000000012 T _Z3fooi
0000000000000000 T _Z3foov
0000000000000007 T _Z4footv
0000000000000000 W _ZN3BarC1Ev
0000000000000000 W _ZN3BarC2Ev
0000000000000000 n _ZN3BarC5Ev

On windows и Microsoft Visual C ++ (msv c?) Я не могу понять, способ получить информацию таким же образом. Я попытался скомпилировать свое приложение с помощью cl /Od /DEBUG и запустить dumpbin /EXPORTS /HEADERS, но у меня нет списка имен искаженных функций моего приложения.

dumpbin /EXPORTS test.exe
Microsoft (R) COFF/PE Dumper Version 14.00.24245.0
Copyright (C) Microsoft Corporation. All rights reserved.


Dump of file test.exe

File Type: EXECUTABLE IMAGE

Summary

2000 .data
1000 .gfids
1000 .pdata
9000 .rdata
1000 .reloc
C000 .text
Type a message

Работает ли dumpbin только с общими библиотеками, а не с исполняемыми файлами? Поскольку мне нужны только искаженные имена (например, _Z3foov, _ZN3BarC1Ev) без изменения кода моего приложения, есть ли лучшее решение для получения этих строк? Я обычно разрабатываю приложение на С ++ на linux. Поэтому я не очень разбираюсь в особенностях windows.

1 Ответ

2 голосов
/ 06 апреля 2020

В Visual Studio вы ищете «файл MAP». Параметр компоновщика - /MAP, он находится в свойствах «Отладка» в Visual Studio. Это генерируется как часть сборки, а не после. Вывод представляет собой простой текстовый файл, похожий на вывод nm.

...