Saya punya objek bersama (dll). Bagaimana cara mengetahui semua simbol yang diekspor dari sana?
linux
shared-libraries
chappar
sumber
sumber
Jawaban:
Apakah Anda memiliki "objek bersama" (biasanya perpustakaan bersama di AIX), perpustakaan bersama UNIX, atau Windows DLL? Ini semua adalah hal yang berbeda, dan pertanyaan Anda mengonfigurasikan semuanya :-(
dump -Tv /path/to/foo.o
.readelf -Ws /path/to/libfoo.so
, atau (jika Anda memiliki GNU nm)nm -D /path/to/libfoo.so
.dumpbin /EXPORTS foo.dll
.sumber
nm
juga berfungsi di MacOSX, kecuali-D
opsi. Ataubrew install binutils
dan gunakan versi GNU viagnm
. Untuk GNUnm
,--demangle
juga bermanfaat. Jugagobjdump
.linux
jadi saya pikir aman untuk mengatakan @ chappar memiliki pustaka bersama Linux.objdump adalah satu lagi yang bagus di linux.
sumber
Jika itu adalah file Windows DLL dan OS Anda adalah Linux maka gunakan winedump :
sumber
Pada * nix periksa nm. Di windows gunakan program Dependency Walker
sumber
nm --defined-only -g something.so
akan mencetak simbol-simbol yang keduanya didefinisikan di perpustakaan dan simbol-simbol eksternal, yang mungkin merupakan apa yang diinginkan OP.lihat man nm
sumber
Menggunakan:
nm --demangle <libname>.so
sumber
nm: /usr/lib/i386-linux-gnu/libtemplates_parser.so.11.6: no symbols
.readelf
atau-D
karya bendera.Cara lintas platform (tidak hanya lintas platform itu sendiri, tetapi juga bekerja, paling tidak, dengan keduanya
*.so
dan*.dll
) menggunakan kerangka kerja reverse-engineering radare2 . Misalnya:Sebagai bonus,
rabin2
mengenali mangling nama C ++, misalnya (dan juga dengan.so
file) :Bekerja dengan file objek juga:
sumber
Anda dapat menggunakan gnu objdump.
objdump -p your.dll
. Kemudian geser ke.edata
isi bagian dan Anda akan menemukan fungsi yang diekspor di bawah[Ordinal/Name Pointer] Table
.sumber
Biasanya, Anda juga akan memiliki file header yang Anda sertakan dalam kode Anda untuk mengakses simbol.
sumber