Tpr*_*e88 2 windows delphi delphi-7
这是我的工作准则
DriftMul:=99;
WriteProcessMemory(HandleWindow, ptr($4E709C), @DriftMul, 2, Write);
Run Code Online (Sandbox Code Playgroud)
我想转换它而不使用变量,但它不会工作下面只是我想做的一个例子.
WriteProcessMemory(HandleWindow, ptr($4E709C), ptr(99), 2, Write);
Run Code Online (Sandbox Code Playgroud)
有没有人知道使用变量使这个工作的方法??? 我能用几种语言编程,我使用的每种语言都是一种方法.我想要这样做的原因是因为我将制作一个大型程序,它可以编写不同的值,它将为我节省大约300多行.下面是我正在使用的c ++中的一个例子.
WriteProcessMemory(hProcess, (void*)0x4E709C, (void*)(PBYTE)"\x20", 1, NULL);
Run Code Online (Sandbox Code Playgroud)
更新:解决它我使用4个程序,我打电话取决于我想写多少字节.
procedure Wpm(Address: Cardinal; ChangeValues: Byte);
Begin
WriteProcessMemory(HandleWindow, Pointer(Address), @ChangeValues, 1, Write);
End;
procedure Wpm2(Address: Cardinal; ChangeValues: Word);
Begin
WriteProcessMemory(HandleWindow, Pointer(Address), @ChangeValues, 2, Write);
End;
procedure Wpm3(Address: Cardinal; ChangeValues: Word);
Begin
WriteProcessMemory(HandleWindow, Pointer(Address), @ChangeValues, 3, Write);
End;
procedure Wpm4(Address: Cardinal; ChangeValues: Cardinal);
Begin
WriteProcessMemory(HandleWindow, Pointer(Address), @ChangeValues, 4, Write);
End;
Run Code Online (Sandbox Code Playgroud)
示例写道
Wpm($477343,$EB);
Wpm2($40A889,$37EB);
Wpm3($416E34,$0086E9);
Run Code Online (Sandbox Code Playgroud)
Pchar是我发现没有程序编译的唯一方法,我不想使用assci.
WriteProcessMemory(HandleWindow, Pointer($449A17), PChar('90'), 1, Write);
Run Code Online (Sandbox Code Playgroud)
你必须存储你在某处写的单词的内容.WriteProcessMemory期望指向进程空间中某些内存的指针.如果您不想使用变量,请使用常量.
const
DriftMul: word=99;
....
WriteProcessMemory(HandleWindow, ptr($4E709C), @DriftMul, 2, Write);
Run Code Online (Sandbox Code Playgroud)
传递ptr(99)失败,因为ptr(99)它不是指向包含该值的单词的指针99.它是一个指向地址99的指针.我认为你试图写,@Word(99)但你不能得到一个真常数的地址.
通过将调用包装WriteProcessMemory在辅助方法中,可以使这更方便.虽然你的问题表明你想要写Word值,但是在冗长的聊天中你很明显你真的想要写字节序列.写入整数数据类型将导致机器字节序混淆.所以我会使用一个开放的数组Byte来实现它,以便在呼叫站点提供灵活性.
procedure WriteBytes(hProcess: THandle; Address: Pointer;
const Buffer: array of Byte);
var
NumberOfBytesWritten: DWORD;
begin
if not WriteProcessMemory(hProcess, Address, @Buffer[0], Length(Buffer),
NumberOfBytesWritten) then RaiseLastOSError;
end;
Run Code Online (Sandbox Code Playgroud)
然后,您可以调用代码
WriteBytes(Handle, Pointer($523328), [$42]);//single byte
WriteBytes(Handle, Pointer($523328), [$CC, $90, $03]);//3 bytes
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3308 次 |
| 最近记录: |