Катастрофа с wsprintf.

Тема в разделе "WASM.WIN32", создана пользователем NoName, 5 дек 2005.

Статус темы:
Закрыта.
  1. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    В связи с моей ситуацией другого названия темы я просто не смог придумать.

    Проблема вот в чем.

    Есть некий очень простой код.

    _test db "string",0

    sformat db "%s",0

    bLocalIP rb 100



    invoke wsprintf,bLocalIP,sformat,_test

    add esp,12



    Конечно вы можете сказать мол ламер поиск рулит.

    Но дело тут не в флагах и даже не в выравнивании.

    И со стеком все в порядке.

    И регистры сохраняются как положено.

    Функция работала еще совсем недавно, я что то добавил, что не касается этого кода и появилась эта ошибка.

    Код ccall и stdcall тоже неработает.

    Для тех кто все еще сомневается include '\apia\user32.inc'.

    AL=6C ('l')

    DS:[BB40E64E]=???
     
  2. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев


    эта строка лишняя, раз ты invoke используешь
     
  3. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    даже если убрать, ошибка, что я написал, появляется внутри wsprintf
     
  4. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев
    а, это фасм... тогда мой пост выше можно не читать (это для масма). Собери простенький эксешник и запости сюда, мало ли что там, сорцы в порядке.
     
  5. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    format PE GUI 4.0

    entry start



    include 'win32a.inc'



    section '.data' data readable writeable

    sformat db "%s",0

    _test db "string",0



    section '.data?' data readable writeable

    bLocalIP rb 100



    section '.code' code readable executable



    start:

    ccall wsprintf,bLocalIP,sformat,_test

    add esp,12

    invoke MessageBox,0,bLocalIP,0,0

    invoke ExitProcess,0





    section '.idata' import data readable writeable



    library kernel,'KERNEL32.DLL',\

    user,'USER32.DLL'



    include '\apia\kernel32.inc'

    include '\apia\user32.inc'
     
  6. Asterix

    Asterix New Member

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



    cinvoke wsprintf, szBuff, format_string, eax
     
  7. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Код (Text):
    1. ;@echo off
    2. ;goto make
    3.  
    4. format PE GUI 4.0
    5. entry start
    6.  
    7. include '%fasminc%\win32a.inc'
    8.  
    9.  
    10. section '.code' code readable executable
    11.  
    12. align 4
    13. start:
    14.     xor ecx, ecx
    15.     push ecx   ; for ExitProcess
    16.     push ecx
    17.     mov eax, [fs:30h]
    18.     mov eax, [eax + 68h]
    19.     mov ecx, szNotFound
    20.     test eax, eax
    21.     jz @F
    22.     mov ecx, szFound
    23. @@:
    24.     push ecx
    25.     cinvoke wsprintf, szBuff, format_string, eax
    26.     push szBuff
    27.     push 0
    28.     call [MessageBox]
    29.     call [ExitProcess]
    30.  
    31.  
    32.  
    33. section '.data' data readable writeable
    34.  
    35. szFound        db  "Debugger Found !!!",0
    36. szNotFound     db  "Debugger NOT Found.",0
    37. format_string  db  "Peb.NtGlobalFlag: %08lX",0
    38. szBuff         rb  64
    39.  
    40.  
    41. section '.idata' import data readable
    42.  
    43. library kernel32,'KERNEL32.DLL',\
    44.           user32,'USER32.DLL'
    45.  
    46. include '%fasminc%\APIA\KERNEL32.INC'
    47. include '%fasminc%\APIA\USER32.INC'
    48.  
    49.  
    50. ;:make
    51. ;SET PROJECTNAME=NtGlobalFlag
    52. ;if exist %PROJECTNAME%.exe del %PROJECTNAME%.exe
    53. ;C:\FasmC\fasm.exe %PROJECTNAME%.bat
    54. ;pause
    55. ;cls
     
  8. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    A_Must_Loll

    Там юзается именно он.



    Asterix

    Непашет.
     
  9. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Asterix

    твой код пашет, только непонятно почему. Пишет все нули.
     
  10. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    A_Must_Loll

    Ты предполагаешь что фасм юзает W? Тогда почему?
     
  11. Asterix

    Asterix New Member

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

    там и должны быть нули( Peb.NtGlobalFlag: 00000000 ), под отладчиком будет другое :derisive:
     
  12. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    NoName

    1.
    Код (Text):
    1. start:
    2. cinvoke wsprintf,bLocalIP,sformat,_test
    3. invoke MessageBox,0,bLocalIP,0,0
    4.  


    2.
    Код (Text):
    1. library kernel[b]32[/b],'KERNEL32.DLL',\
    2. user[b]32[/b],'USER32.DLL'
    3.  


    это работает
     
  13. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    По поводу invoke,cinvoke — смотрите макросы.

    ccall,stdcall делают вызовы по метке (call myproc), а [c]invoke — по значению (call [pmyproc]).
     
  14. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    A_Must_Loll

    что ж, человеку отлучиться низзя? не у всех же в п.пе сетевой разъем ;)
     
  15. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    shoo

    Похоже ты прав. Только выходит что компилятору не все равно как мы обозначаем метки. Странно.

    Хотя с другой стороны это логично, парсеру же нужно сопостовлять обозначения библиотек и их прототипы. Только странно почему компилир ошибку не писал.

    Спасибо.
     
  16. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    прочти мой пост выше 100 раз и у тебя наступит просветление.
     
  17. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    NoName

    Это проблема макросов, генерящих таблицу импортов.

    Проверил на fasm162 — сообщает об ошибке.



    А вообще, дело не в компиляторе — просто не стоит бездумно использовать макросы.
     
  18. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    а ты попробуй на 1.64.
     
  19. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    A_Must_Loll

    Прекрати.



    NoName

    Проверил, баг имеет место быть. Но отчего — мне не интересно, т.к. 1.64 не использую.
     
  20. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    с моим кодом нет никаких проблем ни в 1.56 ни в 1.64

    может тогда нужно просто правильно код писать?
     
Статус темы:
Закрыта.