100元手机冲值卡或Q币卡求购读写内存的函数.或汇款现金 要求如这样的ReadMemoryAddr('程序名','内存地址')函数返回的是可识别的字符串.写WriteMemoryAddr('程序名','内存地址')能写出这样的函数请发邮件到我邮箱与我联系[email protected] 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 上老妖的站点看看,可以用OpenProcess打开其它的进程,然后进行一些操作,但是并不是所有地址都可读、写 就是API ReadProcessMemory的应用而已,没什么难度的_____________________http://lysoft.7u7.net ReadProcessMemory 读另一个进程的内存,原形如下:BOOL ReadProcessMemory(HANDLE hProcess, // 被读取进程的句柄;LPCVOID lpBaseAddress, // 读的起始地址;LPVOID lpBuffer, // 存放读取数据缓冲区;DWORD nSize, // 一次读取的字节数;LPDWORD lpNumberOfBytesRead // 实际读取的字节数;);hProcess 进程句柄可由OpenProcess 函数得到,原形如下:HANDLE OpenProcess(DWORD dwDesiredAccess, // 访问标志;BOOL bInheritHandle, // 继承标志;DWORD dwProcessId // 进程ID;);---- 当然,用完别忘了用 CloseHandle 关闭打开的句柄。 读另一个进程的内存 dwDesiredAccess 须指定为 PROCESS_VM_READ , 写另一个进程的内存 dwDesiredAccess 须指定为 PROCESS_VM_WRITE , 继承标志无所谓,进程ID可由 Process32First 和 Process32Next 得到, 这两个函数可以枚举出所有开启的进程,这样进程的信息也就得到了。 Process32First 和 Process32Next是由 TLHelp32 单元提供的,需在 uses 里加上TLHelp32。ToolsHelp32 封装了一些访问堆、线程、进程等 的函数,只适用于Win9x,原形如下:BOOL WINAPI Process32First(HANDLE hSnapshot // 由 CreateToolhelp32Snapshot 返回的系统快照句柄;LPPROCESSENTRY32 lppe // 指向一个 PROCESSENTRY32 结构;);BOOL WINAPI Process32Next(HANDLE hSnapshot // 由 CreateToolhelp32Snapshot 返回的系统快照句柄;LPPROCESSENTRY32 lppe // 指向一个 PROCESSENTRY32 结构;);hSnapshot 由 CreateToolhelp32Snapshot 返回的系统快照句柄;CreateToolhelp32Snapshot 原形如下:HANDLE WINAPI CreateToolhelp32Snapshot(DWORD dwFlags, // 快照标志; DWORD th32ProcessID // 进程ID;);现在需要的是进程的信息,所以将 dwFlags 指定为 TH32CS_SNAPPROCESS,th32ProcessID 忽略;PROCESSENTRY32 结构如下:typedef struct tagPROCESSENTRY32 { DWORD dwSize; // 结构大小;DWORD cntUsage; // 此进程的引用计数;DWORD th32ProcessID; // 进程ID;DWORD th32DefaultHeapID; // 进程默认堆ID;DWORD th32ModuleID; // 进程模块ID;DWORD cntThreads; // 此进程开启的线程计数;DWORD th32ParentProcessID;// 父进程ID;LONG pcPriClassBase; // 线程优先权;DWORD dwFlags; // 保留; char szExeFile[MAX_PATH]; // 进程全名;} PROCESSENTRY32;---- 至此,所用到的主要函数已介绍完,实现读内存只要从下到上依次调用 上述函数即可,具体参见原代码:procedure TForm1.Button1Click(Sender: TObject);varFSnapshotHandle:THandle;FProcessEntry32:TProcessEntry32;Ret : BOOL;ProcessID : integer;ProcessHndle : THandle;lpBuffer:pByte;nSize: DWORD;lpNumberOfBytesRead: DWORD;i:integer;s:string;beginFSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//创建系统快照FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);//先初始化 FProcessEntry32 的大小Ret:=Process32First(FSnapshotHandle,FProcessEntry32);while Ret dobegins:=ExtractFileName(FProcessEntry32.szExeFile);if s='KERNEL32.DLL' thenbeginProcessID:=FProcessEntry32.th32ProcessID;s:='';break;end;Ret:=Process32Next(FSnapshotHandle,FProcessEntry32);end;//循环枚举出系统开启的所有进程,找出“Kernel32.dll”CloseHandle(FSnapshotHandle);Memo1.Lines.Clear ;memo1.lines.add('Process ID '+IntToHex(FProcessEntry32.th32ProcessID,8));memo1.lines.Add('File name '+FProcessEntry32.szExeFile);////输出进程的一些信息 nSize:=4;lpBuffer:=AllocMem(nSize);ProcessHndle:=OpenProcess(PROCESS_VM_READ,false,ProcessID);memo1.Lines.Add ('Process Handle '+intTohex(ProcessHndle,8));for i:=$00800001 to $0080005f dobeginReadProcessMemory(ProcessHndle,Pointer(i),lpBuffer,nSize,lpNumberOfBytesRead);s:=s+intTohex(lpBuffer^,2)+' ';//读取内容if (i mod 16) =0 thenbeginMemo1.Lines.Add(s);s:='';end;//格式化输出end;FreeMem(lpBuffer,nSize);CloseHandle(ProcessHndle);//关闭句柄,释放内存end; ///////////////////////////////////////////////////////////编写16位程序访问指定内存的值的函数:{Access Memory for win31&win95}{must compile with delphi1.0---16bit App}{no VXD or DLL need}{pure native source code here,all include}{Writen by Xueyu,LEE}const fMemoryMapped:boolean=false;var fSelector :word; fBaseAddr :LongInt; fMemoryPointer :Pointer; fMemorySize :Word;function MapPhysMemory(PhAddr:LongInt; Size:Word):Pointer;{input: }{ phAddr: physics Address}{ Size : Alloc Size(bytes)}{output:}{ Result: pointer to the physics memory}{example:}{ access the address 0:$123}{ ptr:=MapPhysMemory($123,1)}begin Result:=fMemoryPointer; if fMemoryMapped then UnmapPhysMemory; fMemorySize:=Size; fBaseAddr:=PhAddr; fMemoryMapped:=TRUE; fSelector:=AllocSelector(DSeg); SetSelectorBase(fSelector,PhAddr); SetSelectorLimit(fSelector,Size); fMemoryPointer:=Ptr(fSelector,0); Result:=fMemoryPointer;end;procedure UnmapPhysMemory;begin if fMemoryMapped then FreeSelector(fSelector); fSelector:=0; fMemoryMapped:=FALSE; fBaseAddr:=0; fMemoryPointer:=NIL; fMemorySize:=0;end;///////////////////////////////////////////BOOL DebugActiveProcess(DWORD dwProcessId); //将dwProceeeID进程设置为被当前进程调试BOOL ReadProcessMemory( HANDLE hProcess, // handle of the process whose memory is read LPCVOID lpBaseAddress, // address to start reading LPVOID lpBuffer, // address of buffer to place read data DWORD nSize, // number of bytes to read LPDWORD lpNumberOfBytesRead // address of number of bytes read ); BOOL WriteProcessMemory( HANDLE hProcess, // handle to process whose memory is written to LPVOID lpBaseAddress, // address to start writing to LPVOID lpBuffer, // pointer to buffer to write data to DWORD nSize, // number of bytes to write LPDWORD lpNumberOfBytesWritten // actual number of bytes written );不知道能不能帮你 希望的你有帮助 手机话费不知道能不能给 Midas三层结构,如何让客户端之间相互传送信息 如何缩放jpg图片后仍保留Exif信息? 如何锁定一个文件夹? D8的优势 Web Service 返回XML文件的问题 OPENGL是否支持多窗口? 基与mci设备编写应用程序需要安装什么驱动就可以播放Asf avi mpg 等文文件,在哪有下载的? 在线等待:如何用ADOQUERY控件来实现主副表.急啊! 请问float型数转为integer型的数的函数。 Delphi动态弹出菜单是如何响应WM_COMMAND消息的?? 有什么DELPHI控件可以支持DELPHI窗体在运行时设计呢? 如何知道stringgrid的某一列是否可以选择编辑
但是并不是所有地址都可读、写
http://lysoft.7u7.net
BOOL ReadProcessMemory(
HANDLE hProcess, // 被读取进程的句柄;
LPCVOID lpBaseAddress, // 读的起始地址;
LPVOID lpBuffer, // 存放读取数据缓冲区;
DWORD nSize, // 一次读取的字节数;
LPDWORD lpNumberOfBytesRead // 实际读取的字节数;
);
hProcess 进程句柄可由OpenProcess 函数得到,原形如下:
HANDLE OpenProcess(
DWORD dwDesiredAccess, // 访问标志;
BOOL bInheritHandle, // 继承标志;
DWORD dwProcessId // 进程ID;
);
---- 当然,用完别忘了用 CloseHandle 关闭打开的句柄。 读另一个进程的内存 dwDesiredAccess 须指定为 PROCESS_VM_READ , 写另一个进程的内存 dwDesiredAccess 须指定为 PROCESS_VM_WRITE , 继承标志无所谓,进程ID可由 Process32First 和 Process32Next 得到, 这两个函数可以枚举出所有开启的进程,这样进程的信息也就得到了。 Process32First 和 Process32Next是由 TLHelp32 单元提供的,需在 uses 里加上TLHelp32。ToolsHelp32 封装了一些访问堆、线程、进程等 的函数,只适用于Win9x,原形如下:BOOL WINAPI Process32First(
HANDLE hSnapshot //
由 CreateToolhelp32Snapshot 返回
的系统快照句柄;
LPPROCESSENTRY32 lppe // 指向一个 PROCESSENTRY32 结构;
);
BOOL WINAPI Process32Next(
HANDLE hSnapshot // 由 CreateToolhelp32Snapshot 返回
的系统快照句柄;
LPPROCESSENTRY32 lppe // 指向一个 PROCESSENTRY32 结构;
);
hSnapshot 由 CreateToolhelp32Snapshot 返回的系统快照句柄;
CreateToolhelp32Snapshot 原形如下:
HANDLE WINAPI CreateToolhelp32Snapshot(
DWORD dwFlags, // 快照标志;
DWORD th32ProcessID // 进程ID;
);
现在需要的是进程的信息,所以将 dwFlags
指定为 TH32CS_SNAPPROCESS,
th32ProcessID 忽略;PROCESSENTRY32 结构如下:
typedef struct tagPROCESSENTRY32 {
DWORD dwSize; // 结构大小;
DWORD cntUsage; // 此进程的引用计数;
DWORD th32ProcessID; // 进程ID;
DWORD th32DefaultHeapID; // 进程默认堆ID;
DWORD th32ModuleID; // 进程模块ID;
DWORD cntThreads; // 此进程开启的线程计数;
DWORD th32ParentProcessID;// 父进程ID;
LONG pcPriClassBase; // 线程优先权;
DWORD dwFlags; // 保留;
char szExeFile[MAX_PATH]; // 进程全名;
} PROCESSENTRY32;
---- 至此,所用到的主要函数已介绍完,实现读内存只要从下到上依次调用 上述函数即可,具体参见原代码:
procedure TForm1.Button1Click(Sender: TObject);
var
FSnapshotHandle:THandle;
FProcessEntry32:TProcessEntry32;
Ret : BOOL;
ProcessID : integer;
ProcessHndle : THandle;
lpBuffer:pByte;
nSize: DWORD;
lpNumberOfBytesRead: DWORD;
i:integer;
s:string;
begin
FSnapshotHandle:=CreateToolhelp32Snapshot(
TH32CS_SNAPPROCESS,0);
//创建系统快照
FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
//先初始化 FProcessEntry32 的大小
Ret:=Process32First(FSnapshotHandle,FProcessEntry32);
while Ret do
begin
s:=ExtractFileName(FProcessEntry32.szExeFile);
if s='KERNEL32.DLL' then
begin
ProcessID:=FProcessEntry32.th32ProcessID;
s:='';
break;
end;
Ret:=Process32Next(FSnapshotHandle,FProcessEntry32);
end;
//循环枚举出系统开启的所有进程,找出“Kernel32.dll”
CloseHandle(FSnapshotHandle);
Memo1.Lines.Clear ;
memo1.lines.add('Process ID '+IntToHex(
FProcessEntry32.th32ProcessID,8));
memo1.lines.Add('File name '+FProcessEntry32.szExeFile);
////输出进程的一些信息
nSize:=4;
lpBuffer:=AllocMem(nSize);
ProcessHndle:=OpenProcess(PROCESS_VM_READ,false,ProcessID);
memo1.Lines.Add ('Process Handle '+intTohex(ProcessHndle,8));
for i:=$00800001 to $0080005f do
begin
ReadProcessMemory(
ProcessHndle,
Pointer(i),
lpBuffer,
nSize,
lpNumberOfBytesRead
);
s:=s+intTohex(lpBuffer^,2)+' ';
//读取内容
if (i mod 16) =0 then
begin
Memo1.Lines.Add(s);
s:='';
end;
//格式化输出
end;
FreeMem(lpBuffer,nSize);
CloseHandle(ProcessHndle);
//关闭句柄,释放内存
end;
///////////////////////////////////////////////////////////编写16位程序访问指定内存的值的函数:{Access Memory for win31&win95}
{must compile with delphi1.0---16bit App}
{no VXD or DLL need}
{pure native source code here,all include}
{Writen by Xueyu,LEE}
const fMemoryMapped:boolean=false;
var fSelector :word;
fBaseAddr :LongInt;
fMemoryPointer :Pointer;
fMemorySize :Word;function MapPhysMemory(PhAddr:LongInt; Size:Word):Pointer;
{input: }
{ phAddr: physics Address}
{ Size : Alloc Size(bytes)}
{output:}
{ Result: pointer to the physics memory}
{example:}
{ access the address 0:$123}
{ ptr:=MapPhysMemory($123,1)}
begin
Result:=fMemoryPointer;
if fMemoryMapped then UnmapPhysMemory;
fMemorySize:=Size;
fBaseAddr:=PhAddr;
fMemoryMapped:=TRUE;
fSelector:=AllocSelector(DSeg);
SetSelectorBase(fSelector,PhAddr);
SetSelectorLimit(fSelector,Size);
fMemoryPointer:=Ptr(fSelector,0);
Result:=fMemoryPointer;
end;procedure UnmapPhysMemory;
begin
if fMemoryMapped then FreeSelector(fSelector);
fSelector:=0;
fMemoryMapped:=FALSE;
fBaseAddr:=0;
fMemoryPointer:=NIL;
fMemorySize:=0;
end;
///////////////////////////////////////////BOOL DebugActiveProcess(DWORD dwProcessId); //将dwProceeeID进程设置为被当前进程调试BOOL ReadProcessMemory(
HANDLE hProcess, // handle of the process whose memory is read
LPCVOID lpBaseAddress, // address to start reading
LPVOID lpBuffer, // address of buffer to place read data
DWORD nSize, // number of bytes to read
LPDWORD lpNumberOfBytesRead // address of number of bytes read
); BOOL WriteProcessMemory(
HANDLE hProcess, // handle to process whose memory is written to
LPVOID lpBaseAddress, // address to start writing to
LPVOID lpBuffer, // pointer to buffer to write data to
DWORD nSize, // number of bytes to write
LPDWORD lpNumberOfBytesWritten // actual number of bytes written
);
不知道能不能帮你 希望的你有帮助 手机话费不知道能不能给