C++ 为啥我的变量没有生效
本帖最后由 as614001 于 2021-8-5 16:50 编辑在开头定义了
bool is_hook_enable_1 = false; //hook开启标志
DWORD hookEnable(BOOL is_hook_enable) {
if (is_hook_enable) return NULL;
MessageBox(NULL, L"3333", L"看看", 0);
is_hook_enable = true;
//hDlg = hModule;
DWORD WeChatWinDLL = getWeChatWinDLL();
//取得hook点
DWORD hook_point = WeChatWinDLL + offset;
BYTE jmpCode = { 0 };
jmpCode = 0xE9;//jmp 的字节码
//新跳转指令中的数据=跳转的地址-原地址(HOOK的地址)-跳转指令的长度
*(DWORD*)&jmpCode = (DWORD)func - hook_point - HOOK_INS_LEN;//计算并填入跳转的目标地址
//获取进程句柄
HANDLE wx_handle = OpenProcess(PROCESS_ALL_ACCESS, NULL, GetCurrentProcessId());
//备份hook点数据
int rpm_result = ReadProcessMemory(wx_handle, (LPCVOID)hook_point, (LPVOID)bakcode, HOOK_INS_LEN, NULL);
if (rpm_result == 0) {
MessageBox(NULL, L"内存数据读取失败", L"错误", 0);
return NULL;
}
//覆盖hook点数据
int wpm_result = WriteProcessMemory(wx_handle, (LPVOID)hook_point, jmpCode, HOOK_INS_LEN, NULL);
if (wpm_result == 0) {
MessageBox(NULL, L"内存数据写入失败", L"错误", 0);
return NULL;
}
return hook_point;
}
执行
hookEnable(is_hook_enable_1 );
hookEnable(is_hook_enable_1 );
hookEnable(is_hook_enable_1 );
会多次弹窗,看上去是没有赋值到is_hook_enable_1,是因为c++内部变量都是变量?如何可以修改可以生效呢?
百度了下
c++的形参 实参 传递,实参传递的copy值,详见百度 C++中函数变量的引用 。一脸懵逼的出来啦
加 &
楼下的说得对
啥意思?你函数里是判断is_hook_enable是本地变量,你每次都传is_hook_enable_1 是false,当然是弹窗了 你又没改变is_hook_enable_1 的值 或者你把
DWORD hookEnable(BOOL is_hook_enable)
改成
DWORD hookEnable(BOOL &is_hook_enable) is_hook_enable和 is_hook_enable_1 是两个不同的东西,你这基础不过关啊,好好啃基础吧! Jack2002 发表于 2021-8-5 19:35
is_hook_enable和 is_hook_enable_1 是两个不同的东西,你这基础不过关啊,好好啃基础吧!
我没有基础{:1_937:}呀
页:
[1]