首页 > 解决方案 > 太多初始化值错误

问题描述

我只是编码的初学者。我知道 c++ 和 c# 的基础知识。我正在制作一个dll注入器。我还按照教程进行了部分操作。我从教程中获得的一部分内容有一个错误,它是“初始化器值太多”。我不知道那是什么意思,为什么它会在那里。错误nullptr在下一行
void* allocated_memory(h_process, nullptr, MAX_PATH, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
它在第一行nullptr。如果我删除那个 nullptr 那么我会在MAX_PATH

代码的最大部分:

#include <iostream>
#include <Windows.h>
#include <string>
#include <thread>
#include <libloaderapi.h>

void get_id(const char* windows_title, DWORD &process_id) 
{
    GetWindowThreadProcessId(FindWindow(NULL, windows_title), &process_id);
}

void error(const char* error_title, const char* error_message)
{
    MessageBox(NULL, error_message, error_title, NULL);
    exit(-1);
}

bool file_exists(std::string file_name)
{
    struct stat buffer;
    return (stat(file_name.c_str(), &buffer) == 0);
}

int main()
{
    DWORD proc_id = NULL;
    char dll_path(MAX_PATH);
    const char* dll_name = "PW";
    const char* window_title = "Pixel Worlds";

    if (!file_exists(dll_name))
    {
        error("file_exists", "Something went wrong");
    }
    HANDLE h_process = OpenProcess(PROCESS_ALL_ACCESS, NULL, proc_id);
    void* allocated_memory(h_process, nullptr, MAX_PATH, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
    HANDLE h_thread = CreateRemoteThread(h_process, nullptr, NULL, LPTHREAD_START_ROUTINE(LoadLibraryA), allocated_memory, NULL, nullptr);

    CloseHandle(h_process);
    VirtualFreeEx(h_process, allocated_memory, NULL, MEM_RELEASE);
    MessageBox(NULL, "Successfully injected", "Success", NULL);
}

标签: c++dll

解决方案


您似乎正在尝试使用VirtualAllocEx WinAPI 例程,但您没有在尝试的调用中命名该函数,这只是语法不正确。

代替行:

void* allocated_memory(h_process, nullptr, MAX_PATH, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);

您需要声明void*指针并通过如下调用分配它指向的内存:

void* allocated_memory = VirtualAllocEx(h_process, nullptr, MAX_PATH, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);

推荐阅读