Проблема с передачей параметров потоку в dll

Тема в разделе "WASM.BEGINNERS", создана пользователем Flasher, 25 июн 2006.

  1. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Вот код dll
    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. option casemap:none
    4. include \masm32\include\windows.inc
    5. include \masm32\include\user32.inc
    6. includelib \masm32\lib\user32.lib
    7. include \masm32\include\kernel32.inc
    8. includelib \masm32\lib\kernel32.lib
    9. include \masm32\macros\strings.mac
    10.  
    11. PARAMETRI STRUCT
    12.     _strt                  db 256 dup(?)
    13.     _id                    dd 0
    14.     _end                   db ?
    15. PARAMETRI ENDS
    16.  
    17. .code
    18. start proc scr:dword
    19.      mov ecx,scr
    20.        invoke MessageBox,0,addr (PARAMETRI ptr [ecx])._strt,addr (PARAMETRI ptr [ecx])._strt,0
    21.        ret
    22. start endp
    23. LibMain proc hInstDLL:DWORD,reason:DWORD,unused:DWORD
    24.      local p:PARAMETRI
    25.        cmp reason,1
    26.        jne l_exit
    27.               invoke lstrcpy,addr p._strt,$CTA0("string")
    28.               invoke CreateThread,0,0,offset start,addr p,0,0
    29.               invoke CloseHandle,eax
    30.               invoke Sleep,1000
    31. l_exit:ret
    32. LibMain Endp
    33. SysFile proc
    34.        xor eax,eax
    35.        ret
    36. SysFile endp
    37. End LibMain


    Процесс просто падает.

    От чего это может быть?

    Спасибо.
     
  2. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Это опять те же фокусы с последовательным исполнением :)

    Ты не возвращаешь 1 перед выходом и винда, походу, выгружает твою либу, а затем путается начать исполнять созданный поток(об этом говорит исключение по адресу хххх1000h). Странное поведение винды(если я в своих выводах не ошибаюсь).

    Поставь mov eax,1 перед ret и всё заработает.
     
  3. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    asd, Благодарствую!

    А ещё после каждого CreateThread если Sleep не поставить в dll - либо не передадутся параметры, либо всё грохается.