макрос типа
check_name, ecx, 'OPTIONS', .send_options
который развернётся во что-то типа такого ?
cmp dword[ecx], 'OPTI'
jne @f
cmp dword[ecx + 4], 'ONS'
je .send_options
@@:
макросы для быстрейшего* сравнения строк, в т.ч. широких, с учетом регистра и без example: _wcs du 'KeRNeL32.DlL',0 mov esi,_wcs wcsicmp .not_equal,esi,'kernel32.dll',0 ; equal
я более простой сделал ночью macro check_name reg, name, ptr_good { local ..bad, ..full_name,..full_name_len, ..data virtual at 0 ..full_name:: db name,0 ..full_name_len = $ end virtual repeat (..full_name_len shr 2) load ..data dword from ..full_name:(%-1)*4 cmp dword[reg + (%-1)*4], ..data jne ..bad end repeat if (..full_name_len and 11b ) if (..full_name_len and 10b) load ..data word from ..full_name:(..full_name_len and -4) cmp word[reg + (..full_name_len and -4)], ..data jne ..bad end if if ..full_name_len and 1b load ..data byte from ..full_name:(..full_name_len and -2) cmp byte[reg + (..full_name_len and -2)], ..data jne ..bad end if end if jmp ptr_good ..bad: }
Обсуждают сегодня