Нужно к программе подключить dll: Mydll.dll Минимальный размер единственно что надо, это подключение, так как все остальное будет делать dll.
было где то описание неплохое, но быстро найти не удалось http://www.cracklab.ru/f/index.php?action=vthread&forum=5&topic=10093
Да код очень простой. Вот он (FASM): Code (Text): dllname db 'youdll.dll',0 invoke LoadLibrary,dllname Этим кодом DLL подключается к вашей программе. Потом оттуда можно вызывать функции, которые самым хитрым образом могут в ней быть реализованны. Код вызова функции в самом простой случае может быть таким, как он показан через предложение. Мы сейчас используем динамический импорт. Code (Text): invoke GetProcAddress,DllHandle,FunctionName call eax В условиях ограниченной среды обитания бинарного кода можно использовать особенные технологические вызовы позволяющие получить адреса функций без каких либо статических структур данных. В контексте таких сред вызов функций из DLL может быть таким: Code (Text): mov eax, [fs:30h] mov eax, [eax+0Ch] mov eax, [eax+1Ch] mov eax, [eax] mov ebx, [eax+8] getaddr esi, KernelNames getaddr edi, KernelTable push edi mov ebp, [ebx+3Ch] mov ebp, [ebx+ebp+78h] add ebp, ebx mov edx, [ebp+20h] add edx, ebx mov edi, [edx] add edi, ebx pop edx @@: push edi push edx call GetIndex mov edx,[ebp+24h] add edx,ebx mov ax,word [edx+eax*2] and eax,0000FFFFh mov edx,[ebp+1Ch] add edx,ebx mov eax,[edx+eax*4] add eax,ebx pop edx mov [edx],eax add edx,4 mov edi,esi xor eax,eax xor ecx,ecx dec ecx repne scasb mov esi,edi pop edi cmp byte [esi],0 jne @B push MyDllName call [p_GetProcAddress] call eax GetIndex: xor eax,eax xor edx,edx next_name: push esi next_sym: cmp byte [esi],0 je found cmpsb je next_sym @@: scasb jne @B pop esi inc edx jmp next_name found: pop esi mov eax,edx ret KernelNames: db 'GetProcAddress',0 KernelTable: p_GetProcAddress dd 0 MyDllName db 'Mydll.dll',0 Одним динамическим импортом арсенал импорта не ограничивается, если говорить о так называемом статическом импорте, но в любом случае механизмы динамического связывания сохраняются и в этом процессе также прозрачно. Статика заключается в получении адресов импорта загрузчиком образов Windows. Таблицу импорта очень удобно создавать как будто ручками в FASM: Code (Text): library kernel,'kernel32.dll' import kernel,\ Hooy,'Hooy' В MASM методы статического импорта конструируются обычными вызовами внешних имен, но с учетом последующего указания хранящего его LIB файла. LIB файл генерируется вместе с DLL, при ее компиляции и последующей линковке. Более того LIB файл можно сгенерировать самостоятельно, если он отсутствует с помощью всем известной утилиты IMPLIB.