memory block - что значит в masm?

Тема в разделе "WASM.BEGINNERS", создана пользователем RuAsm, 1 янв 2007.

  1. RuAsm

    RuAsm Виктор

    Публикаций:
    0
    Регистрация:
    16 июл 2006
    Сообщения:
    125
    Адрес:
    Спасск-D, Приморский край!
    если можно, то расскажите поподробней..
    еще оператор write непонятен
     
  2. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    желательно излагать максимум информации при поднятии такого типа трэда, непонятно например что именно подразумевается..
    например: "memory block" это, как не сложно перевести на наш язык как "блок памяти" (:)) и он никоим образом не соотносится к ассемблеру, а разнится только от одного режима и процессора к другому, о том как windows (и мы соответственоо через API) работает(м) с памятью можно прочитать у отца Руссиновича, отца Рихтера и прочих..

    о том что такое write?
    очевидно (но не 100-пудово) топикстартер имел в виду макрос write оглашенный в macros.asm из штатного пакета масм, который юзает процедуру StdOut из masm32.lib, которая в свою очередь вызывает по очереди GetStdHandle и WriteFile.. м.да.. нужно заметить что это совсем не по дзенски, зато нагляно и если если мы редкие лентяи и мы используем вывод на консоль всего 1 раз в программе(где вы видели такие программы ? 8-| ) вполне сгодится, хотя и прийдётся писать 2 лишних строки подключения инклуда и библиотеки соответственно.

    хотя у меня тоже вопрос, такой библы masm32.dll нет, откуда-же тогда взялась masm32.lib? в готовом бинарнике в импотре сразу лежит GetStdHandle и WriteFile.. это как такая мистика получается?
    может масм как-то особенно относится к этой либе?
     
  3. RuAsm

    RuAsm Виктор

    Публикаций:
    0
    Регистрация:
    16 июл 2006
    Сообщения:
    125
    Адрес:
    Спасск-D, Приморский край!
    Код (Text):
    1. hFile HANDLE ?                                   ; File handle
    2. hMemory HANDLE ?                            ;handle to the allocated memory block
    3. pMemory DWORD ?                            ;pointer to the allocated memory block
    4. SizeReadWrite DWORD ?                   ; number of bytes actually read or write
    я сразу почкствовал что это не по дзенски!) а как это реализовать по дзенски?)
     
  4. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    теперь я окончательно запутался, приаттач сорец
     
  5. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.347
    rain
    Ты уже достиг того уровня просветления, на котором тебе положено узнать о библиотеках статической компоновки :)
     
  6. Quantum

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

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    rmn
    Можно подумать, что библиотеки импорта к таковым не относятся. Да и понятно ведь, что rain пошутил :)
     
  7. RuAsm

    RuAsm Виктор

    Публикаций:
    0
    Регистрация:
    16 июл 2006
    Сообщения:
    125
    Адрес:
    Спасск-D, Приморский край!
    Раин посмотри пожалуйста
     
  8. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    РуАсм ты ничё не напутал?
    я вообще не понял, вчера пост #3 был не такой как сейчас, там были слова упомянутые в старте "write" и "memory block" соответственно этому я написал #4 но теперь пост явно те такой как был и нету надписи "отредактированно ..." ты что форум похачил?
    в аттаче нет ни "write" ни "memory block"
     
  9. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    rmn ага, давно пора..
    Quantum :derisive:
    RuAsm это подкол такой?
     
  10. RuAsm

    RuAsm Виктор

    Публикаций:
    0
    Регистрация:
    16 июл 2006
    Сообщения:
    125
    Адрес:
    Спасск-D, Приморский край!
    Раин, извини я изучаю икзалиона всмысле его статьи, там "это" и встретил.. он (икзелион) в статье даёт такой исходник:
    Код (Text):
    1.    .386
    2.    .model flat,stdcall
    3.  
    4.    option casemap:none
    5.    WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
    6.    include \masm32\include\windows.inc
    7.    include \masm32\include\user32.inc
    8.  
    9.  
    10.    include \masm32\include\kernel32.inc
    11.    include \masm32\include\comdlg32.inc
    12.    includelib \masm32\lib\user32.lib
    13.    includelib \masm32\lib\kernel32.lib
    14.  
    15.    includelib \masm32\lib\comdlg32.lib
    16.  
    17.    .const
    18.  
    19.    IDM_OPEN equ 1
    20.    IDM_SAVE equ 2
    21.    IDM_EXIT equ 3
    22.    MAXSIZE equ 260
    23.  
    24.    MEMSIZE equ 65535
    25.  
    26.    EditID equ 1                            ; ID of the edit control
    27.  
    28.  
    29.    .data
    30.    ClassName db "Win32ASMEditClass",0
    31.  
    32.    AppName  db "Win32 ASM Edit",0
    33.    EditClass db "edit",0
    34.    MenuName db "FirstMenu",0
    35.    ofn   OPENFILENAME <>
    36.  
    37.    FilterString db "All Files",0,"*.*",0
    38.                 db "Text Files",0,"*.txt",0,0
    39.    buffer db MAXSIZE dup(0)
    40.  
    41.  
    42.    .data?
    43.    hInstance HINSTANCE ?
    44.    CommandLine LPSTR ?
    45.  
    46.    hwndEdit HWND ?                               ; Handle to the edit control
    47.  
    48.    hFile HANDLE ?                                   ; File handle
    49.    hMemory HANDLE ?                            ;handle to the allocated
    50.    memory block
    51.  
    52.    pMemory DWORD ?                            ;pointer to the allocated
    53.    memory block
    54.    SizeReadWrite DWORD ?                   ; number of bytes actually read or
    55.    write
    56.  
    57.  
    58.    .code
    59.    start:
    60.  
    61.        invoke GetModuleHandle, NULL
    62.        mov    hInstance,eax
    63.        invoke GetCommandLine
    64.        mov CommandLine,eax
    65.  
    66.        invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT
    67.        invoke ExitProcess,eax
    68.  
    69.  
    70.    WinMain proc
    71.    hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:SDWORD
    72.        LOCAL wc:WNDCLASSEX
    73.        LOCAL msg:MSG
    74.  
    75.        LOCAL hwnd:HWND
    76.        mov   wc.cbSize,SIZEOF WNDCLASSEX
    77.        mov   wc.style, CS_HREDRAW or CS_VREDRAW
    78.        mov   wc.lpfnWndProc, OFFSET WndProc
    79.  
    80.        mov   wc.cbClsExtra,NULL
    81.        mov   wc.cbWndExtra,NULL
    82.        push  hInst
    83.        pop   wc.hInstance
    84.  
    85.        mov   wc.hbrBackground,COLOR_WINDOW+1
    86.        mov   wc.lpszMenuName,OFFSET MenuName
    87.        mov   wc.lpszClassName,OFFSET ClassName
    88.        invoke LoadIcon,NULL,IDI_APPLICATION
    89.  
    90.        mov   wc.hIcon,eax
    91.        mov   wc.hIconSm,eax
    92.        invoke LoadCursor,NULL,IDC_ARROW
    93.        mov   wc.hCursor,eax
    94.  
    95.        invoke RegisterClassEx, addr wc
    96.        invoke CreateWindowEx,WS_EX_CLIENTEDGE,ADDR ClassName,ADDR AppName,\
    97.               WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
    98.               CW_USEDEFAULT,300,200,NULL,NULL,\
    99.  
    100.               hInst,NULL
    101.        mov   hwnd,eax
    102.        invoke ShowWindow, hwnd,SW_SHOWNORMAL
    103.        invoke UpdateWindow, hwnd
    104.  
    105.        .WHILE TRUE
    106.            invoke GetMessage, ADDR msg,NULL,0,0
    107.            .BREAK .IF (!eax)
    108.            invoke TranslateMessage, ADDR msg
    109.  
    110.            invoke DispatchMessage, ADDR msg
    111.        .ENDW
    112.        mov     eax,msg.wParam
    113.        ret
    114.  
    115.    WinMain endp
    116.  
    117.    WndProc proc uses ebx hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    118.  
    119.        .IF uMsg==WM_CREATE
    120.            invoke CreateWindowEx,NULL,ADDR EditClass,NULL,\
    121.                       WS_VISIBLE or WS_CHILD or ES_LEFT or ES_MULTILINE or\
    122.                       ES_AUTOHSCROLL or ES_AUTOVSCROLL,0,\
    123.  
    124.                       0,0,0,hWnd,EditID,\
    125.                       hInstance,NULL
    126.            mov hwndEdit,eax
    127.            invoke SetFocus,hwndEdit
    128.  
    129.    ;==============================================
    130.    ;        Initialize the members of OPENFILENAME structure
    131.    ;==============================================
    132.            mov ofn.lStructSize,SIZEOF ofn
    133.  
    134.            push hWnd
    135.            pop  ofn.hWndOwner
    136.            push hInstance
    137.            pop  ofn.hInstance
    138.  
    139.            mov  ofn.lpstrFilter, OFFSET FilterString
    140.            mov  ofn.lpstrFile, OFFSET buffer
    141.            mov  ofn.nMaxFile,MAXSIZE
    142.        .ELSEIF uMsg==WM_SIZE
    143.  
    144.            mov eax,lParam
    145.            mov edx,eax
    146.            shr edx,16
    147.            and eax,0ffffh
    148.  
    149.            invoke MoveWindow,hwndEdit,0,0,eax,edx,TRUE
    150.        .ELSEIF uMsg==WM_DESTROY
    151.            invoke PostQuitMessage,NULL
    152.        .ELSEIF uMsg==WM_COMMAND
    153.  
    154.            mov eax,wParam
    155.            .if lParam==0
    156.                .if ax==IDM_OPEN
    157.                    mov  ofn.Flags, OFN_FILEMUSTEXIST or \
    158.  
    159.                                    OFN_PATHMUSTEXIST or OFN_LONGNAMES or\
    160.                                    OFN_EXPLORER or OFN_HIDEREADONLY
    161.                    invoke GetOpenFileName, ADDR ofn
    162.                    .if eax==TRUE
    163.  
    164.                        invoke CreateFile,ADDR buffer,\
    165.                                    GENERIC_READ or GENERIC_WRITE ,\
    166.                                    FILE_SHARE_READ or FILE_SHARE_WRITE,\
    167.  
    168.  
    169.    NULL,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,\
    170.                                    NULL
    171.                        mov hFile,eax
    172.                        invoke GlobalAlloc,GMEM_MOVEABLE or
    173.  
    174.    GMEM_ZEROINIT,MEMSIZE
    175.                        mov  hMemory,eax
    176.                        invoke GlobalLock,hMemory
    177.                        mov  pMemory,eax
    178.  
    179.                        invoke ReadFile,hFile,pMemory,MEMSIZE-1,ADDR
    180.    SizeReadWrite,NULL
    181.                        invoke SendMessage,hwndEdit,WM_SETTEXT,NULL,pMemory
    182.                        invoke CloseHandle,hFile
    183.  
    184.                        invoke GlobalUnlock,pMemory
    185.                        invoke GlobalFree,hMemory
    186.                    .endif
    187.                    invoke SetFocus,hwndEdit
    188.  
    189.                .elseif ax==IDM_SAVE
    190.                    mov ofn.Flags,OFN_LONGNAMES or\
    191.                                    OFN_EXPLORER or OFN_HIDEREADONLY
    192.                    invoke GetSaveFileName, ADDR ofn
    193.  
    194.                        .if eax==TRUE
    195.                            invoke CreateFile,ADDR buffer,\
    196.                                                    GENERIC_READ or GENERIC_WRITE ,\
    197.  
    198.                                                    FILE_SHARE_READ or FILE_SHARE_WRITE,\
    199.  
    200.    NULL,CREATE_NEW,FILE_ATTRIBUTE_ARCHIVE,\
    201.  
    202.                                                    NULL
    203.                            mov hFile,eax
    204.                            invoke GlobalAlloc,GMEM_MOVEABLE or GMEM_ZEROINIT,MEMSIZE
    205.  
    206.                            mov  hMemory,eax
    207.                            invoke GlobalLock,hMemory
    208.                            mov  pMemory,eax
    209.                            invoke SendMessage,hwndEdit,WM_GETTEXT,MEMSIZE-1,pMemory
    210.                            invoke WriteFile,hFile,pMemory,eax,ADDR SizeReadWrite,NULL
    211.                            invoke CloseHandle,hFile
    212.  
    213.                            invoke GlobalUnlock,pMemory
    214.                            invoke GlobalFree,hMemory
    215.                        .endif
    216.                        invoke SetFocus,hwndEdit
    217.  
    218.                    .else
    219.                        invoke DestroyWindow, hWnd
    220.                    .endif
    221.                .endif
    222.  
    223.            .ELSE
    224.                invoke DefWindowProc,hWnd,uMsg,wParam,lParam
    225.                ret
    226.    .ENDIF
    227.  
    228.    xor    eax,eax
    229.    ret
    230.    WndProc endp
    231.    end start
    а в аттаче он (икзелион:)) даёт, то что я в аттаче прикрепил) а я и не посмотрел да и подумать не мог что там разные сорци...от икзелион..:)

    И модеры, понапьются и посты редактируют..:)

    Раин посмотри еще раз пожалуйста, а...

    в функции ReadFile 3 или 4 параметр (тот, который сообщает сколько прочитанно из файла) не понятен, пробовал, просто туда переменную вписать, не прокатывает, прога падает)

    help my..please
     
  11. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    чувак... это же очевидно, просто в стоку не влез комент, стоили из этого столько шуму поднимать?
    пора бы уже знать что мсдн панацея от таких бед,
    3-й: "DWORD nNumberOfBytesToRead" кол-во байт которые хочешь прочитать,
    4-й: "LPDWORD lpNumberOfBytesRead" смещение по которому будет записано сколько байт было реально прочитано
    нужно смещение а к переменной а не сама переменная, кури наверно Зубвока, и себе и нам время с экономишь :derisive:
     
  12. RuAsm

    RuAsm Виктор

    Публикаций:
    0
    Регистрация:
    16 июл 2006
    Сообщения:
    125
    Адрес:
    Спасск-D, Приморский край!
    раин, респект тебе!
    Я пробовал зубкова, два раза один раз где то с пол года назад, второй раз в том месяце, не идет.. нужны предварительные знания.

    зы. сделайте репу!
     
  13. RuAsm

    RuAsm Виктор

    Публикаций:
    0
    Регистрация:
    16 июл 2006
    Сообщения:
    125
    Адрес:
    Спасск-D, Приморский край!
    а насчет memory - смеюсь и плачу)(
     
  14. RuAsm

    RuAsm Виктор

    Публикаций:
    0
    Регистрация:
    16 июл 2006
    Сообщения:
    125
    Адрес:
    Спасск-D, Приморский край!
    Люди извините, меня такого секого, пожалуйста, я не спецально...) я Просто С ДВ щас 5 ночи почти, башка не варит...может я не программист вообще? и стоит с этим смириться?
     
  15. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    ну так ты всё совмещай, никто же не говорит пока до конца его не дочитаешь ни за что друго не браться, как раз наоброт!
    нужно экперементировать со всем что интересно
    подход хоть и долгий и мучительный, но всё-же он всеобъемлющий и истинно дзенский
     
  16. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    RuAsm это ты должен раз и навсегда спросить у себя самого не считаясь ни с чьим мнением (все великие[т.е. продвинутые] люди никогда не обращали внимание на мнения других иначе они никогда бы не стали такими), и до конца жизни уже не возвращаться к этому
     
  17. RuAsm

    RuAsm Виктор

    Публикаций:
    0
    Регистрация:
    16 июл 2006
    Сообщения:
    125
    Адрес:
    Спасск-D, Приморский край!
    раин я тебя уважаю...я просто провёл эксперемент, спрося, программист ли я
     
  18. RuAsm

    RuAsm Виктор

    Публикаций:
    0
    Регистрация:
    16 июл 2006
    Сообщения:
    125
    Адрес:
    Спасск-D, Приморский край!
    да, и совмещать приходится очен много чего, на зубкова не хватает сил