
Алгоритм хеширования ElfHash на Ассемблере

Алгоритм хеширования ElfHash на Ассемблере
ElfHash - это хеш-функция, используемая в формате ELF (Executable and Linkable Format), основном формате исполняемых файлов, объектных файлов и разделяемых библиотек в Unix-подобных системах. Конкретно эта функция применяется для хеширования имен символов (функций, переменных) в хеш-таблицах символьных таблиц ELF-файлов. Этот алгоритм представляет собой элегантный компромисс между скоростью, качеством распределения и простотой реализации, что объясняет его долголетие в экосистеме Unix/Linux.
Функция ElfHash была разработана для System V Application Binary Interface и впервые появилась в AT&T Unix System V Release 4. Она стала стандартом для хеширования имен символов в ELF-файлах и до сих пор используется, например, инструментах анализа бинарных файлов и программах Linux. Несмотря появление более совершенных хеш-функций, ElfHash продолжает использоваться из-за обратной совместимости существующих ELF-файлав.
Code (Assembler) : Убрать нумерацию
- ;---------------------------------------------
- ; Функция вычисления хеша ElfHash
- ;
- ; Параметры:
- ; lpData - указатель на строку
- ; dSize - длина строки
- ; На выходе:
- ; EAX = полученный хеш
- ;---------------------------------------------
- proc ElfHash lpData:DWORD, dSize:DWORD
- push ebx edx esi edi
- mov esi,[lpData]
- mov edi,[dSize]
- xor eax,eax
- xor edx,edx
- .loc_loop:
- cmp edi,0
- jz .loc_ret
- ; Сдвиг и добавление нового символа
- movzx ebx,byte [esi]
- shl eax,4
- add eax,ebx
- ; Проверка переполнения
- mov edx,eax
- and edx,0xF0000000
- jz .next_fast
- ; "Перемешивание" при переполнении
- mov ebx,edx
- shr ebx,24
- xor eax,ebx
- .next_fast:
- ; Обнуление старших бит
- not edx
- and eax,edx
- inc esi
- dec edi
- jmp .loc_loop
- ; Финальное 32-битное хеш-значение
- .loc_ret:
- pop edi esi edx ebx
- ret
- endp
В приложении пример программы с исходным текстом, которая считает хеш ElfHash для введенной строки.
Просмотров: 52 | Комментариев: 1
Комментарии
Отзывы посетителей сайта о статье
Grey
(19.12.2025 в 08:52):
Круто. Аналогичная функция Си на гите занимает 600 строк и кучу библиотек.
Добавить комментарий
Заполните форму для добавления комментария
Пример программы с исходным текстом (FASM)

