Как подключить свою длл?

Тема в разделе "WASM.ASSEMBLER", создана пользователем 13nik13, 30 ноя 2007.

  1. 13nik13

    13nik13 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    35
    Нужно к программе подключить dll: Mydll.dll
    Минимальный размер единственно что надо, это подключение, так как все остальное будет делать dll.
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    постить два раза подряд совершенно необязательно
     
  3. 13nik13

    13nik13 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    35
    А это уже проблема админов! Ибо одно и то же. Защиты нет! А я волнуюсь! =)
     
  4. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    связка LoadLibrary/GetProcAddress генерирует не так уж много кода :derisive:
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    прописать таблицу в импорте.
     
  6. 13nik13

    13nik13 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    35
    А если без мусора? На чистом asm! Где такое можно посмотреть?
     
  7. 13nik13

    13nik13 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    35
    n0name
    Где об этом почитать?
     
  8. Arkadiy_B

    Arkadiy_B New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    6
  9. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
    Да код очень простой. Вот он (FASM):
    Код (Text):
    1. dllname db 'youdll.dll',0
    2. invoke LoadLibrary,dllname
    Этим кодом DLL подключается к вашей программе. Потом оттуда можно вызывать функции, которые самым хитрым образом могут в ней быть реализованны.
    Код вызова функции в самом простой случае может быть таким, как он показан через предложение. Мы сейчас используем динамический импорт.
    Код (Text):
    1. invoke GetProcAddress,DllHandle,FunctionName
    2. call eax
    В условиях ограниченной среды обитания бинарного кода можно использовать особенные технологические вызовы позволяющие получить адреса функций без каких либо статических структур данных. В контексте таких сред вызов функций из DLL может быть таким:
    Код (Text):
    1.       mov   eax, [fs:30h]
    2.       mov   eax, [eax+0Ch]
    3.       mov   eax, [eax+1Ch]
    4.       mov   eax, [eax]
    5.       mov   ebx, [eax+8]
    6.       getaddr   esi, KernelNames
    7.       getaddr   edi, KernelTable
    8.       push  edi
    9.       mov   ebp, [ebx+3Ch]
    10.       mov   ebp, [ebx+ebp+78h]
    11.       add   ebp, ebx
    12.       mov   edx, [ebp+20h]
    13.       add   edx, ebx
    14.       mov   edi, [edx]
    15.       add   edi, ebx
    16.       pop   edx
    17. @@:
    18.       push  edi
    19.       push  edx
    20.       call  GetIndex
    21.       mov   edx,[ebp+24h]
    22.       add   edx,ebx
    23.       mov   ax,word [edx+eax*2]
    24.       and   eax,0000FFFFh
    25.       mov   edx,[ebp+1Ch]
    26.       add   edx,ebx
    27.       mov   eax,[edx+eax*4]
    28.       add   eax,ebx
    29.       pop   edx
    30.       mov   [edx],eax
    31.       add   edx,4
    32.       mov   edi,esi
    33.       xor   eax,eax
    34.       xor   ecx,ecx
    35.       dec   ecx
    36.       repne scasb
    37.       mov   esi,edi
    38.       pop   edi
    39.       cmp   byte [esi],0
    40.       jne   @B
    41.       push  MyDllName
    42.       call  [p_GetProcAddress]  
    43.       call  eax
    44. GetIndex:
    45.       xor   eax,eax
    46.       xor   edx,edx
    47. next_name:
    48.       push  esi
    49. next_sym:
    50.       cmp   byte [esi],0
    51.       je    found
    52.       cmpsb
    53.       je    next_sym
    54. @@:
    55.       scasb
    56.       jne   @B
    57.       pop   esi
    58.       inc   edx
    59.       jmp   next_name
    60. found:
    61.       pop   esi
    62.       mov   eax,edx
    63.       ret
    64.  
    65. KernelNames:
    66.  db 'GetProcAddress',0
    67. KernelTable:
    68.  p_GetProcAddress   dd 0
    69. MyDllName   db 'Mydll.dll',0
    Одним динамическим импортом арсенал импорта не ограничивается, если говорить о так называемом статическом импорте, но в любом случае механизмы динамического связывания сохраняются и в этом процессе также прозрачно. Статика заключается в получении адресов импорта загрузчиком образов Windows. Таблицу импорта очень удобно создавать как будто ручками в FASM:
    Код (Text):
    1. library kernel,'kernel32.dll'
    2. import kernel,\
    3. Hooy,'Hooy'
    В MASM методы статического импорта конструируются обычными вызовами внешних имен, но с учетом последующего указания хранящего его LIB файла. LIB файл генерируется вместе с DLL, при ее компиляции и последующей линковке. Более того LIB файл можно сгенерировать самостоятельно, если он отсутствует с помощью всем известной утилиты IMPLIB.