Создание секции .tls на асме

Тема в разделе "WASM.WIN32", создана пользователем Asterix, 8 июн 2005.

  1. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    bogrus





    Если ты компилил мой пример в неизменном виде, то у меня

    при DLL_PROCESS_ATTACH callback не вызывается(почему??),

    Olly нормально брякается на OEP, если я добавлю

    немножко кода в callback, например вызов API, то все

    вызывается, на OEP не брякается, т.е. все работает,

    я в недоумении.

    Вот так все работает:
    Код (Text):
    1. TlsCallback_0:  ; DllHandle, Reason, Reserved
    2.     cmp DWORD [esp + 4*2], DLL_PROCESS_ATTACH
    3.     jne @F
    4.     push 0
    5.     mov eax, [fs:30h]
    6.     mov eax, [eax + 68h]
    7.     mov ecx, szNotFound
    8.     test eax, eax
    9.     jz @L1
    10.     mov ecx, szFound
    11. @L1:
    12.     push ecx
    13.     cinvoke wsprintf, szBuff, format_string, eax
    14.     push szBuff
    15.     push 0
    16.     call [MessageBox]
    17.     mov BYTE [_start], 6Ah
    18. @@:
    19.     mov eax, 1
    20.     retn 4*3
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine




    На w2ksp4 вызывается(что под олей, что без)! я твой пример не изменял, ты можешь у себя вместо "mov BYTE [_start], 6Ah" сделать "mov BYTE [_start], 0", если сallback отработает значит получишь exception
     
  3. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    bogrus



    Мда, забавно, в 2k действительно работает, но не работает в XP %)



    Кто-нибудь знает причину?
     
  4. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Действительно, XP не хочет вызывать callback при DLL_PROCESS_ATTACH если нету user32.dll, а при DLL_PROCESS_DETACH вызывает всегда, тут одно из двух: или мы что-то намутили со структурой в __tls_used или это нормально... (w2k например без kernel32.dll тоже не вызывает, правда как при ATTACH так и DETACH)