Read/WriteFile и управление памятью

Тема в разделе "WASM.X64", создана пользователем Mikl___, 30 дек 2024.

  1. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    898
    Можно свои написать на основе обычных:
    Код (C):
    1. PVOID CMemory::AlignedAlloc(SIZE_T sz, UINT nAlign) {
    2.     ULONG_PTR pRet = (ULONG_PTR)CoTaskMemAlloc(sz + nAlign);
    3.     ULONG_PTR pOfst = ((pRet + nAlign) & -((INT)nAlign)) - pRet;
    4.  
    5.     pRet += pOfst;
    6.     *((PBYTE)pRet - 1) = (BYTE)pOfst;
    7.  
    8.     return (PVOID)pRet;
    9.  
    10. }
    11.  
    12. VOID CMemory::AlignedFree(PVOID pv) {
    13.     CoTaskMemFree((PVOID)(((ULONG_PTR)pv) - *(((PBYTE)pv) - 1)));
    14. }
    15.  
     
  2. Intro

    Intro Well-Known Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    1.708
    В строке 28 надо заменить код на: _aligned_free(vec._Myfirst)
    Впопыхах забыл поменять деструктор. А вообще хорошо бы сделать макрос по типу работы шаблона С++. В место структуры xr_vector, генерируется например так: xr_vector@name_class. Тогда можно избавиться от _Mysizeclass, да ещё бы макрос быстрого деления бы разработать, чтобы быстро вычислять size контейнера.
     
  3. Entropy

    Entropy Member

    Публикаций:
    0
    Регистрация:
    23 авг 2020
    Сообщения:
    268
    Mikl___, функции ReadFileScatter и WriteFileGather можешь описать как их использовать ? если не сложно
    --- Сообщение объединено, 26 апр 2026 в 17:25 ---
    не обязательно, можно и так сделать
    Код (ASM):
    1.  
    2. option casemap:none
    3.  
    4.     include masm64rt.inc
    5.     include msvcrt.inc
    6.  
    7.     includelib win64\lib64\kernel32.lib
    8.     includelib win64\lib64\user32.lib
    9.     includelib win64\lib64\shell32.lib
    10.     includelib win64\lib64\gdiplus.lib
    11.     includelib win64\lib64\gdi32.lib
    12.     includelib win64\lib64\msvcrt.lib
    13.  
    14.  
    15. public main
    16.  
    17.     .data
    18.  
    19.  
    20.  
    21. object_target db 'shlack.bin',0
    22.  
    23. buffer_1 db 512 dup (0)
    24. buffer_2 db 512 dup (0)
    25.  
    26.  
    27. overlap OVERLAPPED <>
    28.  
    29.  
    30. io_status qword ?
    31.  
    32.  
    33.     .code
    34.  
    35.  
    36. main:
    37. push rbp
    38. sub rsp,56
    39.  
    40.  
    41. invoke CreateFileA,addr object_target,GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL OR FILE_FLAG_OVERLAPPED,0
    42.  
    43. mov [overlap._Offset],1b00h
    44.  
    45. invoke ReadFile,rax,addr buffer_1,1024,addr io_status,addr overlap
    46.  
    47.  
    48.  
    49.     invoke ExitProcess,0
    50.  
    51.  
    52.     end
    53.