Сейчас на форуме: rmn, Magister Yoda, vasilevradislav, tyns777, zombi-vadim (+4 невидимых) |
eXeL@B —› Программирование —› Пооптимизируем код :-) |
Посл.ответ | Сообщение |
|
Создано: 12 мая 2008 09:38 · Поправил: Zloy · Личное сообщение · #1 Вот ознакомьтесь товарищи,написал на асме процедурку получения адресов апи фунций по их хешам занимает 68 байт и это не может не радовать ,но мои чувства подсказывают мне,что можно сделать еще меньше. Сам код в виде BIN->DB ;68 bytes long
Также тестовая программа на Flat Assembler: ;By ZloY (x) 2008
Вот собственно помогите отпимизировать процедуру получения адреса или я залез уже выше крыши? Хотя мне кажеться вот тут: mov edi,[edx+0x20];Name Pointers RVA
Можно отпимизировать на 1-2 байта |
|
Создано: 12 мая 2008 13:08 · Личное сообщение · #2 |
|
Создано: 16 мая 2008 03:27 · Поправил: S_T_A_S_ · Личное сообщение · #3 Имена некоторых команд говорят сами за себя - popa Сразу теряется 4 байта на возврат значения в eax. Если сохранять только регистры в соответствии с распространёнными соглашениями о вызовах - ebx esi edi (ebp здесь не используется, а esp восстанавливается и так) - в сумме будут теже 6 байт, вроде выгоды нет... пока не начнёшь передавать параметры в регистрах - -4 байта на чтение module handle. Передавать можно сразу в ebx - и не надо будет его сохранять + некоторые add можно убрать. В общем получается вот такое начало: .getproc: ; ebx - module handle mov eax,[ebx+3Ch];pe header mov edx,[eax+78h + ebx];export table rva add edx,ebx ;module handle ;... Да, самое главное забыл В ассемблере для возврата значений используют флаги. Здесь получается, что если импорт найдет, то автоматически установлен ZF (но позже сбрасывается add eax,ebx - можно заменить на lea). Главное здесь не экономия 1 байта в этой функции, а экономия 2х байт на проверку возвращаемого значения после каждого вызова. |
|
Создано: 16 мая 2008 06:57 · Личное сообщение · #4 |
eXeL@B —› Программирование —› Пооптимизируем код :-) |