首页
社区
课程
招聘
[已解决] [求助]注入DLL后开启的线程,与该进程主线程访问内存的冲突怎么解决? 10雪币
发表于: 2024-6-27 21:31 2530

[已解决] [求助]注入DLL后开启的线程,与该进程主线程访问内存的冲突怎么解决? 10雪币

2024-6-27 21:31
2530

自写的DLL注入到某进程后,一直有掉线的情况。不定时,有时候几十分钟掉,有时候10几个小时才掉。
该客户端进程的保护非常弱,不会是DLL被检测。
猜测是 内存访问冲突导致的掉线,所以掉线时间才那么不固定。。。
比如:一个线程捡东西,一个线程扔东西,都会影响地面物品对象结构里的数据,影响同一块内存,有可能出现冲突,导致掉线。
我是把 捡 和 扔 放在同一个线程里,先捡,再扔,但是依旧会有掉线,猜测依然还是因为访问冲突导致的掉线。

客户端进程用到的”锁“,互斥相关的资源,默认都不知道。就是找到一种方式解决这种“注入”的线程,与客户端进程主线程间的访问冲突。

用TRY{}这种异常处理,可以解决吗?
望朋友相助,感激不尽!


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 336
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
这个问题我懂,使用内存映射,这样两份同时访问都不冲突。
2024-6-27 23:11
0
雪    币: 26
活跃值: (243)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
客户端报的什么异常?
2024-6-28 00:04
0
雪    币: 26
活跃值: (243)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
如果只是掉线 我并不认为是内存访问异常,内存异常应该是游戏直接崩溃,而不是掉线。
2024-6-28 00:14
0
雪    币: 224
活跃值: (707)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
祝你好运~ 这个问题我懂,使用内存映射,这样两份同时访问都不冲突。
。。你可能是说 COPY一份到另外的物理内存里,映射,访问,相当于访问另外的物理内存里,就没有直接访问进程 原生资源 那块物理内存。。额。。我不会弄。。而且COPY本身也在访问那块内存,也可能触发异常
2024-6-28 13:15
0
雪    币: 224
活跃值: (707)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
就只是掉线,客户端没有崩溃过。。。我去跟过执行流,往前回溯是 消息循环收到一个消息,然后让客户端掉线,弹出掉线弹窗。。。好像跟了没啥用。。
这个掉线时间非常不固定,有时候几分钟掉,有时候几个小时掉,有时候隔1天才掉。。。
有可能是什么问题?
2024-6-28 13:25
0
雪    币: 26
活跃值: (243)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
WYYZCAYQ 就只是掉线,客户端没有崩溃过。。。我去跟过执行流,往前回溯是 消息循环收到一个消息,然后让客户端掉线,弹出掉线弹窗。。。好像跟了没啥用。。 这个掉线时间非常不固定,有时候几分钟掉,有时候几个小时掉, ...
应该不是线程访问内存冲突,不然游戏直接崩溃了。应该是你丢东西太快了,服务器可能有检测你发包的速度。
2024-6-28 13:42
0
雪    币: 6307
活跃值: (3837)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
DLL绑定主线程就行了
2024-6-29 12:33
0
雪    币: 101
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9
加个锁不就行了吗?
2024-6-29 14:37
0
雪    币: 9653
活跃值: (3314)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
10
只是读内存的话是不会冲突的,除非你进行了写的操作那确实有概率,所以你应该把写的操作以及调用CALL的操作放到游戏主线程里进行操作,至于怎么绑定主线程方法有很多,开启一个时钟,或者消息钩子,或者更改游戏的窗口过程
2024-6-29 14:40
0
雪    币: 224
活跃值: (707)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
麻里麻里红 应该不是线程访问内存冲突,不然游戏直接崩溃了。应该是你丢东西太快了,服务器可能有检测你发包的速度。
谢谢帮助。
2024-6-30 16:20
0
雪    币: 224
活跃值: (707)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
大鲤鱼 DLL绑定主线程就行了
嗯。我用WINDOWS API 在消息处理函数前,加了个钩子过滤函数,完成主线程调用CALL。
2024-6-30 16:21
0
雪    币: 224
活跃值: (707)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
喜欢做外挂 加个锁不就行了吗?
锁的机制 ,我不太了解。而且我是注入后,开启的线程,它进程原生的那些锁资源,我不知道能不能直接用。。主要是我不会用锁。。
2024-6-30 16:23
0
雪    币: 224
活跃值: (707)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
千音丶 只是读内存的话是不会冲突的,除非你进行了写的操作那确实有概率,所以你应该把写的操作以及调用CALL的操作放到游戏主线程里进行操作,至于怎么绑定主线程方法有很多,开启一个时钟,或者消息钩子,或者更改游戏 ...
我用WINDOWS API弄了个消息钩子,过滤处理自己的消息,来完成主线程调用CALL。暂时运行正常,还在测试。。。
反正觉得很奇怪,我调用那个游戏自己的CALL怎么会触发问题,然后掉线了。。
会不会有可能,游戏主线程调用那个CALL,会写入某块内存A,我这边也调用那个CALL,CALL内部指令也会写入那块内存A,然后就出问题了。。不太清楚这些。。
2024-6-30 16:31
0
游客
登录 | 注册 方可回帖
返回
//