我想知道是否可以使用Perl,Python或Ruby来编写程序,以便它在另一个进程的内存中查找0x12345678(可能是堆,对于数据和代码数据)然后如果找到它,则更改它到0x00000000?它类似于
Cheat Engine,可以在Windows上执行类似的操作.
解决方法
我最初认为这是不可能的,但在看到Brian的评论之后,我搜索了CPAN并且看到了,有
Win32::Process::Memory:
C:\> ppm install Win32::Process::Info C:\> ppm install Win32::Process::Memory
该模块显然使用ReadProcessMemory
功能:这是我的一个尝试:
#!/usr/bin/perl use strict; use warnings; use Win32; use Win32::Process; use Win32::Process::Memory; my $process; Win32::Process::Create( $process,'C:/opt/vim/vim72/gvim.exe',q{},NORMAL_PRIORITY_CLASS,q{.} ) or die ErrorReport(); my $mem = Win32::Process::Memory->new({ pid => $process->GetProcessID(),access => 'read/query',}); $mem->search_sub( 'VIM',sub { print $mem->hexdump($_[0],0x20),"\n"; }); sub ErrorReport{ Win32::FormatMessage( Win32::GetLastError() ); } END { $process->Kill(0) if $process }
输出:
C:\Temp> proc 0052A580 : 56 49 4D 20 2D 20 56 69 20 49 4D 70 72 6F 76 65 : VIM - Vi IMprove 0052A590 : 64 20 37 2E 32 20 28 32 30 30 38 20 41 75 67 20 : d 7.2 (2008 Aug 0052A5F0 : 56 49 4D 52 55 4E 54 49 4D 45 3A 20 22 00 : VIMRUNTIME: ". 0052A600 : 20 20 66 61 6C 6C 2D 62 61 63 6B 20 66 6F 72 20 : fall-back for 0052A610 : 24 56 : $V