首页
社区
课程
招聘
未解决 在窗口按钮事件中,新建线程,最开始输出正常,但是运行几十秒后,DLL所弹出的窗口以及被注入进程都崩溃了,为什么会这样?
发表于: 2024-3-7 19:01 1810

未解决 在窗口按钮事件中,新建线程,最开始输出正常,但是运行几十秒后,DLL所弹出的窗口以及被注入进程都崩溃了,为什么会这样?

2024-3-7 19:01
1810

窗口是由DLL注入 弹出的。
按钮事件中,新建线程,完成功能,输出是正常的,但是运行一会后,注入的窗口以及被注入进程都崩溃了,猜测是不是什么内存异常导致的。因为我在读游戏进程的内存。代码如下:
void TEST::OnBnClickedButton1()
{

1
2
3
4
5
6
if (!CreateThread(0, 0, (LPTHREAD_START_ROUTINE)ZHAOBOSS, this, 0, 0))
{
    MessageBoxA(0, "新建线程失败!", "标题", 0);
 
}
//MessageBoxA(0, "新建线程成功!", "标题", 0);

}

DWORD ZHAOBOSS(TEST* Dlg_OBJ)
{ //完成 BOSS提示 功能
//TODO: 在此添加控件通知处理程序代码

//思路:判断周围对象名字是否为BOSS名字,之后再判断其是否是怪物。若 名字正确 且 为怪物 ,则进行BOSS提示;其它情况,则不是要找的BOSS,则忽略。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// 运行标志初始化为TRUE
运行标志 = TRUE;
临时字符串 = "";
EDIT = "";
int index;//遍历周围对象结构所用的下标
int MonsterNum;
//初始化极品BOSS名字的数组
const int ListBossNum = 10;
char BossName[ListBossNum][30] = { "半兽统领", "尸王", "神鹰", "巨型多角虫", "邪恶钳虫","白野猪","鹰卫","变异巨型多角虫","变异半兽勇士","鹿"/*测试怪物*/ };
while (运行标志)
{
    //获取周围对象的数量
    MonsterNum = 读内存(读内存(读内存(GameModBase + 0x5E8644) + 0x34D0) + 8);
 
    for (index = 0; index < MonsterNum; index++)
    {
        if (IsRirhtName(BossName, index, ListBossNum))
        {//名字是极品BOSS名字
         //检测该周围对象是否是怪物
            if (IsMonster(index))
            {//index对应的对象是极品BOSS。
                char* OName = (char*)读内存(读内存(读内存(读内存(读内存(GameModBase + 0x5E8644) + 0x34D0) + 4) + index * 4) + 0x10);
                EDIT += OName;
                EDIT += "的位置在:";
                临时字符串.Format(_T("%d"), 读内存(读内存(读内存(读内存(读内存(GameModBase + 0x5E8644) + 0x34D0) + 4) + index * 4) + 0x198));
                EDIT += 临时字符串;
                EDIT += ",";
                临时字符串.Format(_T("%d"), 读内存(读内存(读内存(读内存(读内存(GameModBase + 0x5E8644) + 0x34D0) + 4) + index * 4) + 0x19C));
                EDIT += 临时字符串;
                EDIT += "\r\n";
 
                 Dlg_OBJ->SetDlgItemTextW(IDC_EDIT1 ,EDIT);
             
            }
        }
        else
        {
            Sleep(10);
            //MessageBoxA(0, "名字不是极品BOSS名字", "0", 0);
        }
 
    }
    Sleep(2000);
    EDIT = "";
 
}
return 0;

}
我删掉了一些注释,方便看。代码最开始运行正常,编辑框能正确显示信息,但是过几十秒,游戏进程就蹦了。。是我代码哪里有问题吗?还是本来 这样写,就有内存异常的风险?


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 775
活跃值: (3420)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
2
调试运行,看看崩溃代码在哪里,这会有助于分析
2024-3-8 10:13
0
雪    币: 224
活跃值: (707)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
yeyeshun 调试运行,看看崩溃代码在哪里,这会有助于分析
调试发现,是某个函数中,调用了strcmp函数,而上述代码读内存读出来的名字有时候会为空(不知道为啥。),然后该函数拿空字符串 和 BOSS名称作比对,引发了程序崩溃。。。strcmp函数 设计的很不好。。。。
2024-3-13 01:24
0
游客
登录 | 注册 方可回帖
返回
//