Непонятная ошибка в программе...

Тема в разделе "WASM.WIN32", создана пользователем 47726573684e696b, 7 ноя 2008.

  1. 47726573684e696b

    47726573684e696b New Member

    Публикаций:
    0
    Регистрация:
    1 ноя 2008
    Сообщения:
    15
    Ну значить так, =) написал я код решил запустить... (писал под FASM) вот кстати часть кода где и скрыт подвох как я думаю...
    Код (Text):
    1. a1007:
    2.     invoke CreateFile,buffer,GENERIC_WRITE+GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
    3.     mov [hFile],eax
    4.     invoke GetFileSize,hFile,0
    5.     cmp eax,0
    6.     je err
    7.     mov [FileSize],eax
    8.     invoke GetProcessHeap
    9.     mov [HandHeap],eax
    10.     invoke HeapAlloc,HandHeap,0,FileSize
    11.     mov [p_start],eax
    12.     invoke ReadFile,hFile,p_start,FileSize,[FileSize],0
    13.     cmp eax,0
    14.     je err
    15.     mov eax,1
    16.     jmp finish
    Ну и вот ошибка вылетает только тогда когда появляеться сктрока
    invoke ReadFile,hFile,p_start,FileSize,[FileSize],0
    в коде... То есть ошибка вылетает при выпонении программы а не при компиляции...
     
  2. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
     
  3. 47726573684e696b

    47726573684e696b New Member

    Публикаций:
    0
    Регистрация:
    1 ноя 2008
    Сообщения:
    15
    Непонял ....
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    >> invoke ReadFile,hFile,p_start,FileSize,[FileSize],0
    сначала надо [FileSize], а потом FileSize

    читать MSDN пробовал?

    + буффер надо укзать [p_start], а не p_start.
    все напутал к ядрёне фене
     
  5. 47726573684e696b

    47726573684e696b New Member

    Публикаций:
    0
    Регистрация:
    1 ноя 2008
    Сообщения:
    15
    Все никак скачать/наити не получаеться
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    MSDN? Найти не получается? Тогда это не лечится
     
  7. 47726573684e696b

    47726573684e696b New Member

    Публикаций:
    0
    Регистрация:
    1 ноя 2008
    Сообщения:
    15
    Нет возможности скачать MSDN наити на дисках в нашей деревне невозможно
     
  8. 47726573684e696b

    47726573684e696b New Member

    Публикаций:
    0
    Регистрация:
    1 ноя 2008
    Сообщения:
    15
    Ммм все равно кстати при выполнении проги ошибка лезит что еще посоветуете?
     
  9. zhindos

    zhindos New Member

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

    Show all your code and describe your problem distinctly...
     
  10. 47726573684e696b

    47726573684e696b New Member

    Публикаций:
    0
    Регистрация:
    1 ноя 2008
    Сообщения:
    15
    Код (Text):
    1. format PE GUI 4.0 on '40h.stub'
    2. entry MyEntry
    3.  
    4. include 'F:\coding\radasm\INCLUDE\win32ax.inc'
    5. include 'cripto.inc'
    6.  
    7.  
    8. section '.code' import data code readable writable executable
    9.  
    10.  
    11.   library kernel,       'KERNEL32.DLL',\
    12.       user,         'USER32.DLL',\
    13.       comdlg32,      'COMDLG32.DLL'
    14.  
    15.   import  kernel,\
    16.         CloseHandle,'CloseHandle',\
    17.         CreateFile,'CreateFileA',\
    18.         GetFileSize,'GetFileSize',\
    19.         GetModuleHandle,      'GetModuleHandleA',\
    20.         GetProcessHeap,'GetProcessHeap',\
    21.         HeapAlloc,'HeapAlloc',\
    22.         ReadFile,'ReadFile',\
    23.         ExitProcess,          'ExitProcess'
    24.  
    25.   import  user,\
    26.         SetDlgItemText,       'SetDlgItemTextA',\
    27.         DialogBoxParam,       'DialogBoxParamA',\
    28.         EndDialog,        'EndDialog',\
    29.         SendMessage,          'SendMessageA'
    30.  
    31.   import  comdlg32,\
    32.         GetOpenFileName,      'GetOpenFileNameA',\
    33.         GetSaveFileName,      'GetSaveFileNameA'
    34.  
    35.  
    36. MyEntry:
    37.     invoke  GetModuleHandle,eax
    38.     mov [gIst],eax
    39.     invoke  DialogBoxParam,eax,1,0,DlgProc,0
    40. ExitApp:
    41.     invoke  ExitProcess,0
    42.  
    43. proc DlgProc,hWnd,uMsg,wParam,lParam
    44.  
    45.     push    edi esi ebx
    46.     mov eax,[uMsg]
    47.     cmp eax,WM_COMMAND
    48.     je  jCOMMAND
    49.     cmp eax,WM_INITDIALOG
    50.     je  jINITDIALOG
    51.     cmp eax,WM_CLOSE
    52.     je  jCLOSE
    53.     xor eax,eax
    54.     jmp finish
    55. ;--------------------------------------------------------------------------------
    56. jINITDIALOG:
    57.     mov eax,[hWnd]
    58.     mov [gWnd],eax
    59.    
    60.     mov [ofn.lStructSize],sizeof.OPENFILENAME
    61.     push    [hWnd]
    62.     pop [ofn.hwndOwner]
    63.     push    [gIst]
    64.     pop [ofn.hInstance]
    65.     mov [ofn.lpstrFilter],FilterString
    66.     mov [ofn.lpstrFile],buffer
    67.     mov [ofn.nMaxFile],MAXSIZE
    68.     invoke SetDlgItemText,[hWnd],IDC_EDT1,init_input
    69.     invoke SetDlgItemText,[hWnd],IDC_EDT2,init_out
    70.     invoke SetDlgItemText,[hWnd],IDC_EDT4,load_prog
    71.     mov eax,1
    72.     jmp finish
    73. ;--------------------------------------------------------------------------------
    74.    
    75. jCOMMAND:
    76.     mov eax,[wParam]
    77.     cmp eax,1000
    78.     je  a1000
    79.     cmp eax,1005
    80.     je a1005
    81.     cmp eax,1007
    82.     je a1007
    83.     xor eax,eax
    84.     jmp finish
    85.    
    86. a1000:
    87.     invoke SendMessage,[hWnd],WM_CLOSE,0,0
    88.     mov eax,1
    89.     jmp finish
    90.  
    91. a1005:
    92.     invoke  GetOpenFileName,ofn
    93.     cmp eax,1
    94.     jne finish
    95.         invoke SetDlgItemText,[hWnd],1001,buffer
    96.     mov eax,1
    97.     jmp finish
    98. a1007:
    99.     invoke CreateFile,buffer,GENERIC_WRITE+GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
    100.     mov [hFile],eax
    101.     invoke GetFileSize,hFile,0
    102.     cmp eax,0
    103.     je err
    104.     mov [FileSize],eax
    105.     invoke GetProcessHeap
    106.     mov [HandHeap],eax
    107.     invoke HeapAlloc,HandHeap,0,FileSize
    108.     mov [p_start],eax
    109.     invoke ReadFile,[hFile],[p_start],[FileSize],FileSize,0
    110.     cmp eax,0
    111.     je err
    112.     invoke CloseHandle,hFile
    113.     mov eax,1
    114.     jmp finish
    115.  
    116. err:
    117.    
    118.     mov eax,1
    119.     jmp finish
    120. ;--------------------------------------------------------------------------------
    121.    
    122. jCLOSE:
    123.     invoke  EndDialog,[hWnd],0
    124.     mov eax,1
    125.    
    126. finish:
    127.     pop ebx esi edi
    128.     ret
    129. endp
    130.  
    131. section '.rsrc' resource from 'cripto.res' data readable
     
  11. 47726573684e696b

    47726573684e696b New Member

    Публикаций:
    0
    Регистрация:
    1 ноя 2008
    Сообщения:
    15
    *.inc фаил
    Код (Text):
    1. IDC_EDT1 = 1001
    2. IDC_EDT2 = 1002
    3. IDC_EDT4 = 1010
    4. IDC_BTN2 = 1005
    5.  
    6. MEMSIZE  = 65535
    7. MAXSIZE  = 260
    8.  
    9. section '.data' data readable writeable
    10.  
    11. gIst dd 0
    12. gWnd dd 0
    13. hFile dd 0
    14. FileSize dd 0
    15. HandHeap dd 0
    16. p_start dd 0
    17. init_input TCHAR 'C:\',0
    18. init_out TCHAR 'C:\',0
    19. load_prog TCHAR 'Программа загружена',0
    20.  
    21. FilterString db "Все файлы",0,"*.*",0,0
    22. buffer db MAXSIZE dup(0)
    23.  
    24. ofn OPENFILENAME
     
  12. zhindos

    zhindos New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    142
    Код (Text):
    1. invoke HeapAlloc,HandHeap,0,FileSize
    --> error is here;

    остальное даже не смотрел, эта строчка меня просто убила :lol: DDDDDDDDDDDDDDDDDDD
     
  13. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    47726573684e696b
    ReadFile ты исправил, а вызовы других ф-й кто будет исправлять ? В фасме имя переменной без кв.скобок означает адрес переменной, а со скобками - значение, которое лежит по этому адресу. Поэтому нужно писать:
    Код (Text):
    1. invoke GetFileSize,[hFile],0
    2. invoke HeapAlloc,[HandHeap],0,[FileSize]
    3. invoke CloseHandle,[hFile]
     
  14. zhindos

    zhindos New Member

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

    Да и вызовы API-шек обычно проверяют на успех/неуспех, тогда вопросов меньше(особенно таких) :)
     
  15. 47726573684e696b

    47726573684e696b New Member

    Публикаций:
    0
    Регистрация:
    1 ноя 2008
    Сообщения:
    15
    Угу терь понятно всем спасибо, все свободны))
     
  16. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    Осталось объяснить что это за ник:
    47726573684e696b
    ???
     
  17. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    MSDN можно читать онлайн.
     
  18. 47726573684e696b

    47726573684e696b New Member

    Публикаций:
    0
    Регистрация:
    1 ноя 2008
    Сообщения:
    15
    47726573684e696b = GreshNik в hex))
     
  19. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    47726573684e696b

    [hFile] - это хэндл.
    hFile - а это адрес хэндла.

    По аналогии, просмотри весь код на такой предмет (несколько мест ошибочны).
    Обычная вещь при переходе с MASM на FASM.
     
  20. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Я вообще просто тупо сидел и смотрел в первый раз -круто чувак перепутал адреса и значения по этим адресам во всех местах, где только можно было перепутать )