Вот отрывок кода Код (Text): ;--------------------------------------------------------------------- ------ ; 2. Найдем базовый адрес необходимые нам функции в kernel32.dll ;--------------------------------------------------------------------- ------ call FillFunctionName NumOfFuctions equ 3+5 GetModuleHandleA equ <[ebp]> db "GetModuleHandleA",0 GetModuleFileNameA equ <[ebp+4]> db "GetModuleFileNameA",0 LoadLibraryA equ <[ebp+8]> db "LoadLibraryA",0 db 0 advapi32 db "advapi32.dll",0 OpenSCManagerA equ <[ebp+0Ch]> advapy32Functions db "OpenSCManagerA",0 CreateServiceA equ <[ebp+10h]> db "CreateServiceA",0 StartServiceA equ <[ebp+14h]> db "StartServiceA",0 CloseServiceHandle equ <[ebp+18h]> db "CloseServiceHandle",0 OpenServiceA equ <[ebp+1Ch]> db "OpenServiceA",0 db 0 ;--------------------------------------------------------------------- ------ FillFunctionName: pop esi ;--------------------------------------------------------------------- ------ ; 3. Теперь определим систему Windows. Адрес возврата - тело kernel32.dll. ; Если адрес более 80000000h, то мы под Windows 9x. Иначе под NT. ;--------------------------------------------------------------------- ------ mov edi,[esp] ; адрес возврата and edi,0FFFFFFFEh ; выравниваем на 2 байта js StartWin9x ; бит 31 = 1 - Windows9x sub esp,NumOfFuctions*4 mov ebp,esp call FoundMZHeaderGetFunctions jnz ExitCriticalError ................................................ а вот подпрограмма которая делает то, что ты хочешь Код (Text): ;--------------------------------------------------------------------- --------- ; Вход: edi - адрес возврата основной прогаммы ; esi - адрес таблицы имен ; ebp - адрес таблицы адресов для заполнения ;--------------------------------------------------------------------- --------- FoundMZHeaderGetFunctions: mov ax,"ZM" mov ecx,1024*1024*10 ; 20 Мб std ; обратный поиск NoFoundMZ: or ecx,ecx jnz ContinueFoundMZ ExitFoundMZ: or al,al ; не найден базовый адрес kernel32.dll retn ; или ntoskernel.exe ZF = 0 ContinueFoundMZ: repnz scasw cmp W [edi+1Ah],40h ; Если здесь не 40h jnz NoFoundMZ ; то это не Win32 EXE inc edi ; файл inc edi cld ; Приведем регистры xchg eax,edi mov edi,ebp ;--------------------------------------------------------------------- --------- ; Вход esi-адрес таблицы имен ; edi-адрес таблицы адресов для заполняется ; eax-ImageBase модуля ;--------------------------------------------------------------------- --------- GetAddressFromName: push eax push edi push eax push eax push eax add eax,[eax+3Ch] ; PE - header pop ebx add ebx,[eax+78h] ; ebx - Export Directory pop edx add edx,[ebx+20h] ; edx - AddressOfNames push esi xor ecx,ecx GAFNLabel2: lodsb inc ecx or al,al jnz GAFNLabel2 pop esi GAFNLabel1: pop edi push edi add edi,[edx] add edx,4 push ecx push esi repz cmpsb pop esi pop ecx jnz GAFNLabel1 sub edx,4 pop eax sub edx,eax sub edx,[ebx+20h] shr edx,1 add edx,[ebx+24h] add edx,eax push ecx xor ecx,ecx mov cx,[edx] shl ecx,2 add ecx,eax add ecx,[ebx+1Ch] add eax,[ecx] pop ecx pop edi stosd add esi,ecx cmp byte ptr [esi],NULL pop eax jnz GetAddressFromName retn