посоветуйте syscall

Тема в разделе "WASM.X64", создана пользователем sn0w, 14 янв 2012.

  1. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    956
    решено. неучел что первый параметр при сисколле передается через r10 а в rcx сохраняется retRip
    собственно решил задачу включением билдстепа на масме.

    да и еще такой вопрос (пишу в студии 10) - когда добавляю в проект масм, то почемуто функции в объектниках могу связать (с сей и с самого масма) а вот глобальные переменные - нет. декорации проверял - все норм но никак почемуто(

    такой вот кодес:

    Код (Text):
    1. ;
    2. ;   extern "C" NTSTATUS  ApiCallNtService(ULONG id, ...);
    3. ;
    4.  
    5.  ApiCallNtService   PROC
    6.         mov     rax, rcx
    7.         mov     r10, rdx       
    8.         mov     rdx, r8
    9.         mov     r8, r9
    10.         mov     r9, [rsp+28h]
    11.         add     rsp, 8
    12.         syscall                 ; rsp to stack param distance 20h
    13.         sub     rsp, 8
    14.         ret
    15.  ApiCallNtService   ENDP
    16.  
    17. ;подразумевается что вызывающая функция уже сделала стек-бекинг
    например:

    NTSTATUS rc;
    ULONG callId = GetSyscallIndex(ntdll, "NtClose");

    rc = ApiCallNtService(callId, INVALID_HANDLE_VALUE);