On Sun, 27 Oct 2019 01:47:00 +0300 Andrey Savchenko wrote: > On Sun, 27 Oct 2019 01:38:40 +0300 Alexey Tourbin wrote: > > On Sat, Oct 26, 2019 at 6:10 PM Andrey Savchenko wrote: > > > On Sat, 26 Oct 2019 17:17:25 +0300 Alexey Tourbin wrote: > > > > $ rpm -q --provides glibc-core |grep 'libdl.*set' > > > > libdl.so.2()(64bit) = set:hdBjS1I4gQ8BohwImELo8Zh > > > > $ ./a.out set:hdBjS1I4gQ8BohwImELo8Zh > > > > 0272 > > > > 0a8f > > > > 12b4 > > > > 1f1c > > > > 1fb0 > > > > 23f5 > > > > 31a1 > > > > 3571 > > > > 35d3 > > > > 3bcb > > > > > > Как я понял, это хеши символов. По какому алгоритму они вычисляются? > > > Мне нужно для имеющегося списка символов вычислить аналогичные хеши > > > для дальнейшего сравнения. > > > > Это set.c:hash(), но можно воспользоваться set_new/set_add, который > > хеширует и сортирует строки по хешу. Прикрепил более полный пример. > > > > $ /usr/lib/rpm/provided_symbols /lib64/libdl.so.2 |./a.out > > set:hdBjS1I4gQ8BohwImELo8Zh 1 > > 0272 dladdr1 > > 0a8f _dlfcn_hook > > 12b4 dlsym > > 1f1c dlerror > > 1fb0 dlclose > > 23f5 dlopen > > 31a1 dlinfo > > 3571 dlvsym > > 35d3 dladdr > > 3bcb dlmopen > > Спасибо! Как раз это мне и нужно. К сожалению, для решения реальной проблемы этого недостаточно: $ /usr/lib/rpm/provided_symbols /usr/lib64/libharfbuzz-subset.so.0 | ./get_hash set:nkVnoZa9uXJTAxpulY0e0jZy0 warning: hash collision: _ZN10__cxxabiv115__forced_unwindD1Ev _ZNK2OT8OffsetToINS_12ConditionSetENS_7IntTypeIjLj4EEELb1EE8sanitizeEP21hb_sanitize_context_tPKv get_hash: get_hash.c:45: main: Assertion `set->sv[i].v == v[i]' failed. Aborted (core dumped) Понятно, что нужно обрабатывать коллизии хешей, но код set.c слишком велик, чтоб в нём разобраться за разумное время без детальной документации. Best regards, Andrew Savchenko