код ведет себя по разному....

Тема в разделе "WASM.BEGINNERS", создана пользователем intty, 13 авг 2005.

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

    intty New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2005
    Сообщения:
    5
    Адрес:
    Zimbabwe
    короче проблема в следуюшем. Хочу открыть файл вида c:\path\nameofexe.ini



    вот код:
    Код (Text):
    1.  .386
    2.  .model flat,stdcall
    3. option casemap:none
    4.  
    5. includelib c:\masm32\lib\kernel32.lib
    6. includelib c:\masm32\lib\User32.lib
    7.  
    8. include c:\masm32\include\kernel32.inc
    9. include c:\masm32\include\user32.inc
    10. include c:\masm32\include\windows.inc
    11.  
    12.  
    13.  .data
    14.     sOk     db 'All ok',0h
    15.     sErr        db 'Error',0h
    16.  .code
    17.  
    18. start:
    19.     call    GetCommandLine
    20.     mov edi,eax
    21.     push    eax
    22.     call    lstrlen
    23.     mov dword ptr[edi+eax-4],000696E69h ;ini
    24.     push    NULL
    25.     push    FILE_ATTRIBUTE_NORMAL
    26.     push    OPEN_EXISTING
    27.     push    NULL
    28.     push    NULL
    29.     push    GENERIC_READ
    30.     push    edi
    31.     call    CreateFile
    32.     cmp eax,-1
    33.     je  _eropn
    34.     push    eax
    35.     call    CloseHandle
    36.     push    MB_ICONINFORMATION
    37.     push    offset sOk
    38.     push    edi
    39.     push    NULL
    40.     call    MessageBox
    41.     jmp _exit
    42. _eropn:
    43.     push    eax
    44.     call    CloseHandle
    45.     push    MB_ICONWARNING
    46.     push    offset sErr
    47.     push    edi
    48.     push    NULL
    49.     call    MessageBox
    50. _exit:
    51.     xor eax,eax
    52.     push    eax
    53.     call    ExitProcess
    54.  
    55. end start


    а теперь о проблеме:

    -просто запускаем программу - управление получает ветка _eropn:, в мессаджбоксе - "C:\path\nameofexe.eini"

    -запускаем под Olly 2.0 - управление получает ветка _eropn:, в мессаджбоксе - "C:\path\nameofexe.ini"

    -запускаем под w32Dasm 8.93 - все ОК, в мессаджбоксе - "C:\path\nameofexe.ini"



    я что-то нифига не могу понять, может дебагеры по разному инициализируют регистры или еще чего, значит я что-то упустил. Что?



    ОС - XP SP1, masm 8-ой hutch'евский.

    Опции:

    -линкрера: "/coff"

    -компилера: "/SUBSYSTEM:WINDOWS /ALIGN:4"
     
  2. Quantum

    Quantum Паладин дзена

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


    То, что возвращает
    может быть заключено в двойные кавычки.



    Кстати, лучше использовать GetModuleFileName, ибо command-line может быть пустой строкой.
     
  3. intty

    intty New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2005
    Сообщения:
    5
    Адрес:
    Zimbabwe
    Quantum:

    Спасибо!

    Действительно, дело было в кавычках.

    ок, я переделал c GetModuleFileName, работает.

    Но мне интересно, в каких случаях GetCommandLine может возвращать пустую строку, в msdn об этом ни слова.
     
  4. Quantum

    Quantum Паладин дзена

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


    Когда в CreateProcess этот параметр = 0.
     
  5. intty

    intty New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2005
    Сообщения:
    5
    Адрес:
    Zimbabwe
    Quantum: еще раз сенк.

    больше вопросов нет.
     
Статус темы:
Закрыта.