У меня есть общий объект (dll). Как мне узнать, что из этого экспортируются все символы?
linux
shared-libraries
Chappar
источник
источник
Ответы:
У вас есть «общий объект» (обычно это общая библиотека в AIX), разделяемая библиотека UNIX или Windows DLL? Это все разные вещи, и ваш вопрос объединяет их все :-(
dump -Tv /path/to/foo.o
.readelf -Ws /path/to/libfoo.so
или (если у вас GNU nm)nm -D /path/to/libfoo.so
.dumpbin /EXPORTS foo.dll
.источник
nm
также работает на MacOSX, кроме-D
опции. Илиbrew install binutils
используйте версию GNU черезgnm
. Для GNUnm
,--demangle
также полезно. Такжеgobjdump
.linux
поэтому я думаю, что можно с уверенностью сказать, что у @chappar есть общая библиотека Linux.objdump - еще один хороший вариант для Linux.
источник
Если это файл DLL Windows и ваша ОС Linux, используйте winedump :
источник
На * nix проверьте nm. В windows используйте программу Dependency Walker
источник
nm --defined-only -g something.so
будет печатать символы, которые определены в библиотеке и внешние символы, что, вероятно, и нужно OP.см человек нм
источник
Использование:
nm --demangle <libname>.so
источник
nm: /usr/lib/i386-linux-gnu/libtemplates_parser.so.11.6: no symbols
,readelf
или-D
флаг работает.Кроссплатформенный способ (не только сам кроссплатформенный, но также работающий, по крайней мере, с обоими
*.so
и*.dll
) использует фреймворк обратного проектирования radare2 . Например:В качестве бонуса
rabin2
распознает искажение имени C ++, например (а также с.so
файлом) :Также работает с объектными файлами:
источник
Вы можете использовать gnu objdump.
objdump -p your.dll
, Затем перейдите к.edata
содержимому раздела, и вы найдете экспортированные функции под[Ordinal/Name Pointer] Table
.источник
Обычно у вас также есть файл заголовка, который вы включаете в свой код для доступа к символам.
источник