Пишу лоадер в процедурном стиле. Все как бе получается, но единственное кумарит, так это: lea eax,[variable1] add eax,[delta] push eax lea eax,[variable2] add eax,[delta] push eax ..... .... .... lea eax,[variable100500] add eax,[delta] push eax lea eax,[proc1] add eax,[delta] call eax жутко неэстетично. думал сделать типа macro shcall proc,delta,[arg] { if ~ arg eq reverse lea eax,[arg] add eax,[delta] pushd arg end if lea eax,[proc] add eax,[delta] call eax } Сразу скажу, про макросы нихера не читал Не до макросов сейчас. Так, как выше обозначено - как-то не трушно это все получилось. Как бы рандонимизировать регистры ? Дальше по сути дела конечно вставлю туда генерацию мусора и тд. Сначала нужно скелет нормализованных вариэйблс и процедур. PS: или по барабану на рандомизацию ? Всеравно ж будет сие творение упаковываться в обёртку ?
для начала: invoke\stdcall eax , addr var + delta В итоге прийдешь к такому, если макросы учить будешь(хотя может и умнее что то придумаешь): 32 бита CallAPI.FromRVA( edi , ZwQueryInformationToken )\ ( [dwTemp] , TOKEN_INFORMATION_CLASS.TokenElevation , addr bElevated , 4 , addr dwTemp ) 64 бита CallAPI.FromRVA( rdi , ZwQueryInformationToken )\ ( qword [dwTemp] , TOKEN_INFORMATION_CLASS.TokenElevation , addr bElevated , 4 , addr dwTemp ) Макрос CallAPI.FromRVA только написать нужно будет.
common_up, как вариант: Код (Text): my_virtual_table: I_table: i_proc1 = 00h i_proc2 = 04h i_proc3 = 08h var_table: variable1 = 0Ch variable2 = 14h variable3 = 18h proc proc1 p_my_virtual_table, i_proc, param1 mov someREG, p_my_virtual_table invoke [someREG+i_proc], [someREG+param1] ret endp ;proc1