Редактирование памяти с помощью пользовательской функции в Lua C API - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь редактировать память с помощью своей пользовательской функции в API luaC, но, например, когда мне нравится 3 lua_tonumber (LS, -1), это просто смешивается? Пожалуйста, попробуйте просмотреть мой код и скажите мне, как это исправить ..

lua_State *L;

using namespace std;




DWORD MyGetProcessId(LPCTSTR ProcessName) 
{
    PROCESSENTRY32 pt;
    HANDLE hsnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    pt.dwSize = sizeof(PROCESSENTRY32);
    if (Process32First(hsnap, &pt)) {
        do {
            if (!lstrcmpi(pt.szExeFile, ProcessName)) {
                CloseHandle(hsnap);
                return pt.th32ProcessID;
            }
        } while (Process32Next(hsnap, &pt));
    }
    CloseHandle(hsnap);
    return 0;
}

int CustomGetProcessByName(lua_State* Ls) {
    DWORD dieman = MyGetProcessId(lua_tostring(Ls, -1));


    lua_pushvalue(Ls, dieman);

    return 1;

}
int CustomWriteMemInt(lua_State* Ls) {



    HANDLE ProcHand = OpenProcess(PROCESS_ALL_ACCESS, FALSE, lua_tonumber(Ls, -1));
    int Value = lua_tonumber(Ls, -3);
    WriteProcessMemory(ProcHand, (LPVOID)lua_topointer(Ls, -2), &Value, sizeof(Value), 0);

    return 1;

}

void Load() {
    L = luaL_newstate();
    lua_register(L, "GetProcByName", CustomGetProcessByName);
    lua_register(L, "WriteMemInt", CustomWriteMemInt);



}
int main() {
    Load();
    luaL_dostring(L, "a = GetProcByName('ac_client.exe')");
    luaL_dostring(L, "WriteMemInt(a, 0x0293AA60, 9999)");
    system("Pause");
}

Я знаю, что функция записи памяти работает, потому что я сделал это без этого ..

1 Ответ

0 голосов
/ 07 марта 2020

lua_topointer возвращает указатель на объект lua. Вы просто хотите использовать lua_tonumber.

Обратите внимание, что число обычно является двойным, поэтому не может содержать 64-битные адреса, в вашем примере это должно работать, хотя адрес кажется равным 32 -битовый.

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