WriteProcessMemory的线程

时间:2016-12-07 16:23:31

标签: multithreading delphi

我需要一些帮助,我正在编写一个修改应用程序中某些值的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);

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

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

我可以看到一些问题。包括:

  1. 没有错误检查。
  2. 请求超出您需要的PROCESS_ALL_ACCESS
  3. 线程程序的签名错误。
  4. 最后一个可以解释您应用中的崩溃,但不会解释其他应用。线程程序应该是:

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

    很可能其他应用程序崩溃了,因为你正在搞砸它的内存。尝试删除对WriteProcessMemory的调用,看看其他应用是否会停止崩溃。