【问题标题】:Thread with WriteProcessMemory带有 WriteProcessMemory 的线程
【发布时间】:2016-12-07 16:23:31
【问题描述】:

我需要一些帮助,我正在编写一个 dll 来修改应用程序中的某些值。但如果我冻结价值应用程序崩溃(一段时间后停止工作)。

这是我的代码: 在这里我创建一个更新地址的线程:

CreateThread(nil, 0, @UpdateAddr, Pointer(nil), 0, rodaid)

这里是函数UpdateAddr:

procedure UpdateAddr;
var
  BytesWrite: DWORD;
  buf: Cardinal;
begin
  while true do
  begin
    buf := Random(38);
    WriteProcessMemory(ProcessH, SpeedAddr, addr(buf), sizeof(buf), BytesWrite);
  end;
end;

这里是我如何打开进程:

ProcessH := OpenProcess (PROCESS_ALL_ACCESS, False, ProcessId);

由于任何原因,我不知道应用程序在创建线程一段时间后崩溃。

有人可以帮助我吗?

【问题讨论】:

    标签: multithreading delphi


    【解决方案1】:

    我可以看到一些问题。其中:

    1. 没有错误检查。
    2. 请求PROCESS_ALL_ACCESS,这超出了您的需要。
    3. 线程过程的签名错误。

    最后一个可以解释您的应用程序崩溃,但不能解释其他应用程序。线程程序应该是:

    function ThreadProc(lpParameter: Pointer): DWORD; stdcall;
    

    另一个应用程序崩溃很可能是因为您正在使用它的内存。尝试移除对WriteProcessMemory 的调用,看看其他应用是否停止崩溃。

    【讨论】:

    • 谁崩溃是另一个应用程序,而不是我的应用程序,我应该在 OpenProcess 上使用什么而不是 PROCESS_ALL_ACCESS?
    • 阅读 WriteProcessMemory 的文档。答案就在那里。至于为什么另一个应用程序崩溃了,因为你在背后搞砸它。向应用程序的开发者寻求支持。
    • 另一个应用程序是一个游戏,如果我用作弊引擎冻结相同的地址,游戏不会崩溃。
    • 联系游戏开发者寻求支持
    • 不可能。
    猜你喜欢
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多