Доступ запрещен при чтении памяти отладчика - PullRequest
0 голосов
/ 30 сентября 2018

Я открыл процесс с:

HANDLE CreateDebuggedProcess(LPCSTR lpApplicationName)
{
    STARTUPINFO startupInfo;
    PROCESS_INFORMATION processInformation;

    ZeroMemory(&startupInfo, sizeof(startupInfo));
    startupInfo.cb = sizeof(startupInfo);
    ZeroMemory(&processInformation, sizeof(processInformation));

    if (!CreateProcessA(
        lpApplicationName,
        NULL,
        NULL,
        NULL,
        FALSE,
        DEBUG_PROCESS,
        NULL,
        NULL,
        &startupInfo,
        &processInformation
    ))
    {
        return INVALID_HANDLE_VALUE;
    }

    return processInformation.hProcess;
}

Я жду первого события BreakPoint, а затем пытаюсь распечатать память, на которую указывает рип памяти.Я получаю рип с Get

void * getRip(DWORD threadId)
{
    BOOL status = FALSE;
    CONTEXT context = { 0 };

    context.ContextFlags = CONTEXT_ALL;
    HANDLE threadHandle = OpenThread(THREAD_GET_CONTEXT, FALSE, threadId);
    if (NULL != threadHandle)
    {
        if(!GetThreadContext(threadHandle, &context))
        {
            status = FALSE;
            return 0;
        }

        return (void *)context.Rip;
    }

    return 0;
}

, и возвращаемые значения кажутся правильными.Затем я пытаюсь вызвать ReadProcessMemory, но получаю ошибку 299: ReadProcessMemory: invalid argument (Only part of a ReadProcessMemory or WriteProcessMemory request was completed.).

BOOL queryMemory(HANDLE processHandle, void * address)
{
    MEMORY_BASIC_INFORMATION memoryInformation = { 0 };

    if (0 == VirtualQueryEx(processHandle, address, &memoryInformation, sizeof(memoryInformation)))
    {
        printf("failed :( Lasr error: %x\n", GetLastError());
        return FALSE;
    }

    printf("AllocProtect: %x, state: %x, type: %x\n", memoryInformation.Protect
                                                    , memoryInformation.State
                                                    , memoryInformation.Type);
    return TRUE;
}

Какой возврат AllocProtect: 1, state: 10000, type: 0.Это означает, что у меня нет доступа, но это странно, потому что я должен иметь доступ ко всему, так как я создал процесс.

Что я делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...