zoukankan      html  css  js  c++  java
  • VB读写进程的内存

    在窗体部分简单测试了ReadProcessMemory和WriteProcessMemory对另一个程序进程的读写.

    由于临时项目变动,又不需要了,所以直接封类,删工程.以下代码没有一个函数经过测试,编译都没有进行...

    Option Explicit
    Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
    Private Const PROCESS_ALL_ACCESS = &H1F0FFF
    Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal dwProcess As Long, lpBaseAddress As Any, lpbuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
    Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal dwProcess As Long, lpBaseAddress As Any, lpbuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
    Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
    Dim dwProc As Long
    Dim dwPid As Long
    '设置进程
    Public Function SetProcess(Pid As Long)
        Call Terminate
        dwProc = OpenProcess(PROCESS_ALL_ACCESS, False, Pid)
        dwPid = Pid
    End Function
    '读取,分别对应 字节组,十六进制和整数
    Private Function ReadMemoryA(Addr As Long, Size As Long) As Byte()
        If Size < 1 Then Exit Function
        Dim Ret As Boolean, buf() As Byte
        ReDim buf(Size - 1) As Byte
        Ret = ReadProcessMemory(dwProc, ByVal Addr, buf(0), Size, 0)
        If Ret Then ReadMemory = buf
    End Function
    Private Function ReadMemoryH(Addr As Long, Size As Long) As String
        If Size < 1 Then Exit Function
        Dim Ret As Boolean, buf() As Byte
        ReDim buf(Size - 1) As Byte
        Ret = ReadProcessMemory(dwProc, ByVal Addr, buf(0), Size, 0)
        If Ret Then
            Dim i As Long
            For i = 0 To UBound(buf)
                If buf(i) > 15 Then
                    ReadMemoryH = ReadMemoryH & Hex(buf(i)) & " "
                Else
                    ReadMemoryH = ReadMemoryH & "0" & Hex(buf(i)) & " "
                End If
            Next
        End If
    End Function
    Private Function ReadMemoryL(Addr As Long) As Long
        If Size < 1 Then Exit Function
        Dim Ret As Boolean, L As Long
        ReadProcessMemory dwProc, ByVal Addr, L, 4, 0
        ReadMemoryL = L
    End Function
    '写入,分别对应 单字节,字节组,和整数
    Private Function WriteMemory(Addr As Long, buf As Byte)
        WriteProcessMemory dwProc, ByVal Addr, buf, 1, 0&
    End Function
    Private Function WriteMemoryA(Addr As Long, buf() As Byte)
        WriteProcessMemory dwProc, ByVal Addr, buf(0), UBound(buf) + 1, 0&
    End Function
    Private Function WriteMemoryL(Addr As Long, L As Long)
        WriteProcessMemory dwProc, ByVal Addr, L, 4, 0&
    End Function
    '销毁资源占用
    Private Sub Terminate()
        If dwPid <> 0 Then CloseHandle dwPid
        If dwProc <> 0 Then CloseHandle dwProc
    End Sub
    Private Sub Class_Terminate()
        Call Terminate
    End Sub
  • 相关阅读:
    为什么单片机程序中会有延时程序加入
    20145238 《信息安全系统设计基础》课程总结
    20145238-荆玉茗 《信息安全系统设计》第14周学习总结
    20145238-荆玉茗 《信息安全系统设计基础》第13周学习总结
    20145238-荆玉茗 《信息安全系统设计基础》第十二周学习总结
    补:第五周实验楼实践
    20145224&20145238《信息安全系统设计基础》实验三
    20145238 《信息安全系统设计基础》第十一周学习总结
    20145238《信息安全系统设计基础》第十周学习总结
    20145224&20145238《信息安全系统设计基础》实验五
  • 原文地址:https://www.cnblogs.com/xiii/p/7215730.html
Copyright © 2011-2022 走看看