Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 6314
Последний выпуск: 19.06.2015

Недопустимая инструкция: .if[..arg?Sm]=DLL_PROCESS_ATTACH

77K
02 августа 2012 года
reconnect
25 / / 30.07.2012
Код:
format PE GUI 4.0 DLL
entry DllEntryPoint
                     
  include 'include\win32a.inc'
                     
  macro   wrapperapi a
    {                      
          jmp        dword [a]
    }
                     
          HOOK_DLL_NAME equ    'msimg32.dll'
                                         
          szSysDllPath         db 256 dup (?)
          hHookMod             dd ?
                                                               
  msimgname:
                               db 'vSetDdrawflag',0
                               db 'AlphaBlend',0
                               db 'DllInitialize',0
                               db 'GradientFill',0
                               db 'TransparentBlt',0
                               dw 0
  msimgaddr:
          _vSetDdrawflag       dd ?
          _AlphaBlend          dd ?
          _DllInitialize       dd ?
          _GradientFill        dd ?
          _TransparentBlt      dd ?
                                         
  vSetDdrawflag:
          wrapperapi _vSetDdrawflag
  AlphaBlend:
          wrapperapi _AlphaBlend
  DllInitialize:
          wrapperapi _DllInitialize
  GradientFill:
          wrapperapi _GradientFill
  TransparentBlt:
          wrapperapi _TransparentBlt
                                                             
;--------------------------------------------------------------------------------;
; [DllEntryPoint]
;--------------------------------------------------------------------------------;                      
  proc DllEntryPoint hinstDLL,fdwReason,lpvReserved
    .if        [fdwReason] = DLL_PROCESS_ATTACH
          invoke     GetSystemDirectory,szSysDllPath,256
          mov        edx,szSysDllPath
          mov        byte[edx+eax],'\'
          invoke     lstrcat,szSysDllPath,HOOK_DLL_NAME
          stdcall    get_API,szSysDllPath,msimgname,msimgaddr
          mov        [hHookMod],eax
    .elseif    [fdwReason] = DLL_PROCESS_DETACH
          invoke     FreeLibrary,[hHookMod]
    .endif    
          mov        eax,TRUE
          ret        
  endp    
                                                               
;--------------------------------------------------------------------------------;
; [get_API]
;--------------------------------------------------------------------------------;                      
  proc get_API uses esi edi,lpDllName,lpApiName,lpApiAddres
    locals
          hlib                 dd ?
    endl
          mov        esi,[lpApiName]
          mov        edi,[lpApiAddres]
          invoke     LoadLibrary,[lpDllName]
          test       eax,eax
          je         .err
          mov        [hlib],eax
    .next:    
          invoke     GetProcAddress,[hlib],esi
          test       eax,eax
          je         .err
          stosd      
  @@:        
          lodsb      
          test       al,al
          jnz        @b
          lodsw      
          test       ax,ax
          jz         .exit
          dec        esi
          dec        esi
          jmp        .next
    .exit:    
          mov        eax,[hlib]
    .err:      
          ret        
  endp    
                                                                                 
data import
                     
  library kernel32,'KERNEL32.DLL'
                     
  import  kernel32,\
          GetSystemDirectory,'GetSystemDirectoryA',\
          GetModuleHandle,'GetModuleHandleA',\
          LoadLibrary,'LoadLibraryA',\
          FreeLibrary,'FreeLibrary',\
          GetProcAddress,'GetProcAddress',\
          lstrcat,'lstrcat'
                     
end data
                     
data export
                     
  export  'msimg32.dll',\
          vSetDdrawflag,'vSetDdrawflag',\
          AlphaBlend,'AlphaBlend',\
          DllInitialize,'DllInitialize',\
          GradientFill,'GradientFill',\
          TransparentBlt,'TransparentBlt'
end data
                                         
section '.reloc' fixups data discardable
277
02 августа 2012 года
arrjj
1.7K / / 26.01.2011
include 'macro\if.inc'
277
02 августа 2012 года
arrjj
1.7K / / 26.01.2011
у тебя:
 
Код:
HOOK_DLL_NAME equ    'msimg32.dll'
должно быть
 
Код:
HOOK_DLL_NAME db   'msimg32.dll',0
ну и вызывать так вроде:
 
Код:
invoke     lstrcat,DWORD [szSysDllPath],DWORD [HOOK_DLL_NAME]
ну и в других функциях аналогично.
65K
02 августа 2012 года
verholom
48 / / 29.08.2011
Я ФАСМом не пользуюсь, но, насколько я знаю, в нем нету .if ... .endif. Это МАСМовская конструкция. Но могу я еще и ошибаться: попробуйте двойное равенство (в стиле Си). А почему нельзя написать сравнение ч/з cmp?
77K
02 августа 2012 года
reconnect
25 / / 30.07.2012
Нет, это точно FASM
77K
02 августа 2012 года
reconnect
25 / / 30.07.2012
Спасибо arrjj, но теперь:

277
02 августа 2012 года
arrjj
1.7K / / 26.01.2011
в инвок попробуй адрес передавать
77K
02 августа 2012 года
reconnect
25 / / 30.07.2012
Как именно это должно выглядеть, напиши пожалуста пример
77K
02 августа 2012 года
reconnect
25 / / 30.07.2012
скоплитилась без ошибок даже без:

 
Код:
invoke     lstrcat,DWORD [szSysDllPath],DWORD [HOOK_DLL_NAME]
Эти DWORD'ы важны?

На выходе должна быть dll
277
02 августа 2012 года
arrjj
1.7K / / 26.01.2011
Цитата: reconnect

Эти DWORD'ы важны?



Да не вроде и без них должно работать.

77K
02 августа 2012 года
reconnect
25 / / 30.07.2012
Спасибо arrjj !

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог