Помогите с DLL

Тема в разделе "WASM.BEGINNERS", создана пользователем fragment, 28 авг 2010.

  1. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    Помогите собрать Dll пожалуйста
    Код (Text):
    1. ;;;;;;;;;;;;;;;;;EXE;;;;;;;;;;;;;;;;
    2.  
    3. .686
    4. .model flat,stdcall
    5. option casemap:none
    6.  
    7. includelib library\kernel32.lib
    8. includelib library\user32.lib
    9. includelib library\shell32.lib
    10.  
    11. .data?
    12.     hLib dd ?
    13.  
    14. .data
    15.     DllnotFound db "Dll x4live.dll not found.",0
    16.         dllname db "dll.dll",0
    17.     DllMain db "DllMain",0
    18. .code
    19. start:
    20.    
    21.     LoadLibraryA PROTO :DWORD
    22.         push offset dllname
    23.         call LoadLibraryA
    24.    
    25.     cmp eax,0
    26.     je @F
    27.  
    28.     mov hLib,eax
    29.  
    30.     GetProcAddress PROTO :DWORD,:DWORD
    31.     push eax
    32.     push offset DllMain
    33.     call GetProcAddress
    34.  
    35.     call eax
    36.  
    37.     FreeLibrary PROTO :DWORD
    38.     push hLib  
    39.     call FreeLibrary
    40.         jmp @exit
    41.  
    42. @@:
    43.     MessageBoxA PROTO :DWORD,:DWORD,:DWORD,:DWORD
    44.     push 10h
    45.     push 0
    46.     push offset DllnotFound
    47.     push 0
    48.     call MessageBoxA
    49.     ExitProcess PROTO :DWORD
    50.  
    51. @exit:
    52.     push eax
    53.     call ExitProcess       
    54.  
    55. end start
    56.  
    57. ;;;;;;;;;;;;;;;;;;;DLL;;;;;;;;;;;;;;;;;;;;
    58.  
    59. .686
    60. .model flat,stdcall
    61. option casemap:none
    62.  
    63. includelib library\kernel32.lib
    64. includelib library\user32.lib
    65. includelib library\shell32.lib
    66.  
    67. .data
    68.  
    69.     MainDllmsg db "MainDll proc msg",0
    70.  
    71. .code
    72.  
    73. DllEntry proc hInstDLL:DWORD, reason:DWORD, reserved1:DWORD
    74.  
    75.     mov eax,1
    76.     ret
    77.  
    78. DllEntry endp
    79.  
    80.  
    81. MainDll proc
    82.  
    83.     MessageBoxA PROTO :DWORD,:DWORD,:DWORD,:DWORD
    84.         push 0
    85.         push 0
    86.         push offset MainDllmsg
    87.         push 0
    88.         call MessageBoxA
    89.    
    90.     ret
    91.  
    92. MainDll endp
    93. End DllEntry
    94.  
    95. ;;;;;;;;;;;;;;;;Def;;;;;;;;;;;;;;;;
    96.  
    97. LIBRARY   dll
    98. EXPORTS   MainDll
    ехе собирается а вот длл пишет ошибку
    собераю так
    Ml.exe /c /coff dll.asm
    Link.exe /SUBSYSTEM:WINDOWS /DEF:dll.def /LIBPATH:dll.obj

    LINK : warning LNK4001: no object files specified; libraries used
    LINK : warning LNK4068: /MACHINE not specified; defaulting to X86
    LINK : fatal error LNK1159: no output file specified
     
  2. FLASH300

    FLASH300 New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2008
    Сообщения:
    72
    \masm32\link /nologo /DLL /DEF:%exe%.def /subsystem:windows %exe%.obj

    внимательней смотреть надо.
     
  3. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    C:\Users\Алексей\Desktop\masm>Ml.exe /c /coff dll.asm
    Microsoft (R) Macro Assembler Version 10.00.30319.01
    Copyright (C) Microsoft Corporation. All rights reserved.

    Assembling: dll.asm

    C:\Users\Алексей\Desktop\masm>
    Link.exe /nologo /DLL /SUBSYSTEM:WINDOWS /DEF:dll.def /LIBPATH:dll.obj
    LINK : warning LNK4001: no object files specified; libraries used
    LINK : warning LNK4068: /MACHINE not specified; defaulting to X86
    LINK : fatal error LNK1159: no output file specified

    C:\Users\Алексей\Desktop\masm>dir dll.*
    Том в устройстве C не имеет метки.
    Серийный номер тома: D460-F1D2

    Содержимое папки C:\Users\Алексей\Desktop\masm

    27.08.2010 18:21 504 dll.asm
    27.08.2010 16:55 32 dll.def
    28.08.2010 15:18 775 dll.obj
    3 файлов 1 311 байт
    0 папок 234 762 006 528 байт свободно

    C:\Users\Алексей\Desktop\masm>pause
    Для продолжения нажмите любую клавишу . . .
     
  4. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    FLASH300
    Ошибка то не в предупреждениях )))
    вы просто не указали выходной файл.
     
  5. FLASH300

    FLASH300 New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2008
    Сообщения:
    72
    fragment
    да еп далась тебе эта /LIBPATH:


    Код (Text):
    1. C:\masm32>goto make
    2.  
    3. C:\masm32>set exe=dll
    4.  
    5. C:\masm32>\masm32\Ml.exe /c /coff "C:\masm32\dll.bat"
    6. Microsoft (R) Macro Assembler Version 10.00.30128.01
    7. Copyright (C) Microsoft Corporation.  All rights reserved.
    8.  
    9.  Assembling: C:\masm32\dll.bat
    10.  
    11. C:\masm32>\masm32\Link.exe /nologo /DLL /SUBSYSTEM:WINDOWS /DEF:dll.def dll.obj
    12.    Creating library dll.lib and object dll.exp
    13.  
    14. C:\masm32>pause
    15.  
    16. или
    17.  
    18. C:\masm32>goto make
    19.  
    20. C:\masm32>set exe=dll
    21.  
    22. C:\masm32>\masm32\Ml.exe /c /coff "C:\masm32\dll.bat"
    23. Microsoft (R) Macro Assembler Version 10.00.30128.01
    24. Copyright (C) Microsoft Corporation.  All rights reserved.
    25.  
    26.  Assembling: C:\masm32\dll.bat
    27.  
    28. C:\masm32>\masm32\Link.exe /nologo /DLL /SUBSYSTEM:WINDOWS /DEF:dll.def /LIBPATH:C:\masm32\lib\ dll.obj
    29.    Creating library dll.lib and object dll.exp
    30.  
    31. C:\masm32>pause
    ну да LINKу объектник нафиг не нужен правда :)
     
  6. FLASH300

    FLASH300 New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2008
    Сообщения:
    72
  7. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    fragment
    Спец для вас:
    И вообще почитайте Iczelion`a
     
  8. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    Делаю все как вы сказали
    Link.exe /DLL /SUBSYSTEM:WINDOWS /DEF:dll.def /LIBPATH:dll.obj
    LINK : fatal error LNK1159: no output file specified

    непонимаю не надо было указывать выходной фаил , если указываешь то получаются два файла exp и еще какойто а мне нужна dll

    Вот посмотрите каму не трудно:
    http://share.netbynet.ru/98masm.zip

    все , всем спасибо , получилось собрать dll Link.exe /DLL /SUBSYSTEM:WINDOWS /DEF:dll.def /LIBPATH:/library dll.obj
    но программа не работает , посмотрите исходничек пожалуйсиа

    ошибка видемо вот здесь
    Код (Text):
    1.    
    2.    GetProcAddress PROTO :DWORD,:DWORD
    3.    push eax
    4.    push offset DllMain
    5.    call GetProcAddress
    6.  
    7.    cmp eax,0
    8.    je @error
     
  9. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    Код (Text):
    1. .686
    2. .model flat,stdcall
    3. option casemap:none
    4.  
    5. includelib library\kernel32.lib
    6. includelib library\user32.lib
    7. includelib library\shell32.lib
    8.  
    9. .data
    10.  
    11.     MainDllmsg db "MainDll proc msg",0
    12.  
    13. .code
    14.  
    15. DllEntry proc hInstDLL:DWORD, reason:DWORD, reserved1:DWORD
    16.  
    17.     mov eax,1
    18.     ret
    19.  
    20. DllEntry endp
    21.  
    22.  
    23. MainDll proc
    24.  
    25.     MessageBoxA PROTO :DWORD,:DWORD,:DWORD,:DWORD
    26.     push 0
    27.     push 0
    28.     push offset MainDllmsg
    29.     push 0
    30.     call MessageBoxA
    31.    
    32.     ret
    33.  
    34. MainDll endp
    35. End DllEntry
    Код (Text):
    1. .686
    2. .model flat,stdcall
    3. option casemap:none
    4.  
    5. includelib library\kernel32.lib
    6. includelib library\user32.lib
    7. includelib library\shell32.lib
    8.  
    9. .data?
    10.     hLib dd ?
    11.  
    12. .data
    13.     DllnotFound db "Dll x4live.dll not found.",0
    14.     dllname db "dll.dll",0
    15.     MainDll db "MainDll",0
    16. .code
    17. start:
    18.    
    19.     LoadLibraryA PROTO :DWORD
    20.     push offset dllname
    21.     call LoadLibraryA
    22.    
    23.     cmp eax,0
    24.     je @F
    25.  
    26.     mov hLib,eax
    27.  
    28.     GetProcAddress PROTO :DWORD,:DWORD
    29.     push eax
    30.     push offset MainDll
    31.     call GetProcAddress
    32.  
    33.     cmp eax,0
    34.     je @F
    35.  
    36.     call eax
    37.  
    38.     FreeLibrary PROTO :DWORD
    39.     push hLib
    40.     call FreeLibrary
    41.     jmp @exit
    42.  
    43. @@:
    44.     MessageBoxA PROTO :DWORD,:DWORD,:DWORD,:DWORD
    45.     push 10h
    46.     push 0
    47.     push offset DllnotFound
    48.     push 0
    49.     call MessageBoxA
    50.     ExitProcess PROTO :DWORD
    51.  
    52. @exit:
    53.     push eax
    54.     call ExitProcess       
    55.  
    56. end start
    Код (Text):
    1. LIBRARY   dll
    2. EXPORTS   MainDll
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Может проще посмотреть семплы из пакета Хатчессона ?
     
  11. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    я читал и смотрел исходники Iczelion`a , вроде все так же делаю, ладно если ошибка так не видна то буду смотреть внимательней еще раз
     
  12. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    все работает просто нужно поменять местами операнды для функцмм GetProcAddress всем спасибо!
     
  13. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    а вот так кто нибудь пробывал делать?
    Фаил создается но текстовая мсг не появляется :dntknw: нет возврата из библиотеки , помогите

    Код (Text):
    1. .686
    2. .model flat,stdcall
    3. option casemap:none
    4.  
    5. includelib library\kernel32.lib
    6. includelib library\user32.lib
    7. includelib library\shell32.lib
    8.  
    9. .data
    10.  
    11.     MainDllmsg db "MainDll proc msg",0
    12.     exename db "file.exe",0
    13.  
    14. .data?
    15.  
    16.     Temp db 260 dup (?)
    17.     hFile dd ?
    18.  
    19. .code
    20.  
    21. DllEntry proc hInstDLL:DWORD, reason:DWORD, reserved1:DWORD
    22.  
    23.     mov eax,1
    24.     ret
    25.  
    26. DllEntry endp
    27.  
    28.  
    29. MainDll proc
    30.    
    31.     GetTempPathA PROTO :DWORD,:DWORD
    32.     push offset Temp
    33.     push 260
    34.     call GetTempPathA
    35.  
    36.     lstrcatA PROTO :DWORD,:DWORD
    37.     push offset exename
    38.     push offset Temp
    39.     call lstrcatA
    40.  
    41.     CreateFileA PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
    42.     push 0h
    43.     push 0h
    44.     push 2h
    45.     push 0h
    46.     push 1h+2h
    47.     push 80000000h+40000000h
    48.     push offset Temp
    49.     call CreateFileA
    50.  
    51.     mov hFile,eax
    52.  
    53.     WriteFile PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
    54.     push 0
    55.     push 0
    56.     push FileLen
    57.     push offset File
    58.     push eax
    59.     call WriteFile
    60.  
    61.     CloseHandle PROTO :DWORD
    62.     push hFile
    63.     call CloseHandle
    64.  
    65.     MessageBoxA PROTO :DWORD,:DWORD,:DWORD,:DWORD
    66.     push 0
    67.     push 0
    68.     push offset MainDllmsg
    69.     push 0
    70.     call MessageBoxA
    71.    
    72.     ret
    73.  
    74. MainDll endp
    75. End DllEntry
    76.  
    77. .data
    78.  
    79. FileLen equ 2560d
    80. File                    db 04dh, 05ah, 090h, 000h, 003h, 000h, 000h, 000h, 004h, 000h
    81.                         db 000h, 000h, 0ffh, 0ffh, 000h, 000h, 0b8h, 000h, 000h, 000h
    82.                         db 000h, 000h, 000h, 000h, 040h, 000h, 000h, 000h, 000h, 000h
    83.                         db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
    84. ...
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    fragment
    По теме - нужно указывать 4-й параметр.
    Вы уже захламили форум своими скринами и копиями постов с WriteFile(). Вас предупреждали.
     
  15. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266