Проблема Ассемблер. Проблема

Gemfory

Green Team
03.01.2026
17
7
Разрабатываю собственный протектор с реализацией виртуализации инструкций.
На этапе инициализации возникла проблема, программа успешно находит целевой файл, но отказывается выполнять его маппинг в адресное пространство процесса, уже минут 30 не могу понять в чем проблема.
Был бы благодарен, если бы кто-то помог решить данную проблему
1774690743584.webp


C:
_MAP_FILE_TO_MEMORY:
            lea        rcx, [array]
            mov        rdx, 80000000h 
            mov        r8, 1         
            xor        r9, r9
            mov        qword [rsp + 20h], 3 
            mov        qword [rsp + 28h], 80h 
            mov        qword [rsp + 30h], 0
            call    [CreateFileA]

            cmp        rax, -1
            je        _FATAL_ERROR
            mov        [hFile], rax
            mov        r14, rax

            mov        rcx, r14
            xor        rdx, rdx
            mov        r8d, 2         
            xor        r9d, r9d
            mov        qword [rsp + 20h], 0
            mov        qword [rsp + 28h], 0
            call    [CreateFileMappingA]

            test    rax, rax
            jz        _FATAL_ERROR
            mov        [hMap], rax

            mov        rcx, rax
            mov        edx, 4     
            xor        r8d, r8d
            xor        r9d, r9d
            mov        qword [rsp + 20h], 0
            call    [MapViewOfFile]

            test    rax, rax
            jz        _FATAL_ERROR
            mov        [pMap], rax
            mov        r13, rax

            lea        rcx, [mapping_ok]
            call    [printf]

            jmp        _PARSE_PE_HEADER
C:
format PE64 console
entry start
include 'win64a.inc'


; const
INVALID_FILE_ATTRIBUTES equ -1
;-----
section '.data' data readable writeable
inputs db "Please specify the full path to the file: ", 0
fmt_path db '%[^\n]s', 0
; ----
msg_ok  db 27, '[92m[GOOD]', 27, '[0m File accepted for processing! Compiling...', 10, 0
msg_bad db 27, '[91m[ERROR]', 27, '[0m This file does not exist or you have specified an incorrect path!', 10, 0
; ----
msg_no_mapping db 27, '[91m[ERROR]', 27, '[0m The file could not be mapped!', 10, 0
mapping_ok db 27, '[92m[GOOD]', 27, '[0m [+] File mapping...', 10, 0

section '.bss' readable writeable
hFile        dq    ?
hMap        dq    ?
pMap        dq    ?
dwSize        dd    ?
dwMode        dd    ?
hOut        dq    ?
array        rb    260

section '.code' code readable executable
start:
            sub     rsp, 48h
            mov     rcx, -11
            call    [GetStdHandle]
            mov     [hOut], rax

            mov     rcx, [hOut]
            mov     rdx, dwMode
            call     [GetConsoleMode]

            mov     rcx, [hOut]
            mov     edx, [dwMode]
            or         edx, 4
            call    [SetConsoleMode]
        ; --- ---
            lea     rcx, [inputs]
            call    [printf]
          
            lea     rcx, [fmt_path]
            lea     rdx, [array]   
            call    [scanf]
          
            lea     rcx, [array]
            call     [GetFileAttributesA]
          
            cmp        eax, INVALID_FILE_ATTRIBUTES
            je      file_not_found
          
        ; -----
            lea     rcx, [msg_ok]
            call    [printf]
            call    [_getch]
          
_MAP_FILE_TO_MEMORY:
            lea        rcx, [array]
            mov        rdx, 80000000h 
            mov        r8, 1         
            xor        r9, r9
            mov        qword [rsp + 20h], 3 
            mov        qword [rsp + 28h], 80h 
            mov        qword [rsp + 30h], 0
            call    [CreateFileA]

            cmp        rax, -1
            je        _FATAL_ERROR
            mov        [hFile], rax
            mov        r14, rax

            mov        rcx, r14
            xor        rdx, rdx
            mov        r8d, 2         
            xor        r9d, r9d
            mov        qword [rsp + 20h], 0
            mov        qword [rsp + 28h], 0
            call    [CreateFileMappingA]

            test    rax, rax
            jz        _FATAL_ERROR
            mov        [hMap], rax

            mov        rcx, rax
            mov        edx, 4     
            xor        r8d, r8d
            xor        r9d, r9d
            mov        qword [rsp + 20h], 0
            call    [MapViewOfFile]

            test    rax, rax
            jz        _FATAL_ERROR
            mov        [pMap], rax
            mov        r13, rax

            lea        rcx, [mapping_ok]
            call    [printf]

            jmp        _PARSE_PE_HEADER
_FATAL_ERROR:
            lea     rcx, [msg_no_mapping]
            call     [printf]
            jmp     _CLEANUP
          
_CLEANUP:
            mov     rcx, [pMap]
            test    rcx, rcx
            jz      @f
            call    [UnmapViewOfFile]
        @@:
            mov     rcx, [hMap]
            test    rcx, rcx
            jz      @f
            call    [CloseHandle]
        @@:
            mov     rcx, [hFile]
            test    rcx, rcx
            jz      @f
            call    [CloseHandle]
        @@:
            call    [_getch]
            xor     rcx, rcx
            call    [ExitProcess]
_PARSE_PE_HEADER:
          
file_not_found:
            lea     rcx, [msg_bad]
            call     [printf]
            call     [_getch]
          
            add        rsp, 48h
            ret
      
section '.idata' import data readable
    library kernel32, 'kernel32.dll', \
            msvcrt,   'msvcrt.dll'

    import kernel32, \
           GetStdHandle,        'GetStdHandle', \
           GetConsoleMode,      'GetConsoleMode', \
           SetConsoleMode,      'SetConsoleMode', \
           ExitProcess,         'ExitProcess', \
           GetFileAttributesA,  'GetFileAttributesA', \
           CreateFileA,         'CreateFileA', \
           CreateFileMappingA,  'CreateFileMappingA', \
           MapViewOfFile,       'MapViewOfFile', \
           UnmapViewOfFile,     'UnmapViewOfFile', \
           CloseHandle,         'CloseHandle', \
           GetFileSize,         'GetFileSize'

    import msvcrt, \
           printf,  'printf', \
           _getch,  '_getch', \
           scanf,   'scanf', \
           gets,    'gets'
 
GetLastError() что говорит?
Вот процедура, которая покажет код ошибки в читабельном виде - вставьте её вызов после MapViewOfFile(), и узнаете проблему.

C-подобный:
proc  GetError
        push    rax
        invoke  GetLastError
        invoke  FormatMessage,FORMAT_MESSAGE_FROM_SYSTEM,0,eax,0,errBuff,128,0
        invoke  MessageBox,0, errBuff, 0,0
        pop     rax
        ret
endp
 
GetLastError() что говорит?
Вот процедура, которая покажет код ошибки в читабельном виде - вставьте её вызов после MapViewOfFile(), и узнаете проблему.

C-подобный:
proc  GetError
        push    rax
        invoke  GetLastError
        invoke  FormatMessage,FORMAT_MESSAGE_FROM_SYSTEM,0,eax,0,errBuff,128,0
        invoke  MessageBox,0, errBuff, 0,0
        pop     rax
        ret
endp
Пишет ошибка прав доступа, странно.
Пробовал запускать от имени администратора, программа которая маппится написана мною
OneDrive отключен
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Курс AD