作者changjeimin (小张)
看板Visual_Basic
标题[.NET] 记忆体阵列搜寻问题
时间Sat Aug 7 06:55:06 2010
请教前辈们 ,我 下面有一段程式 是参考网路上的 记忆体搜寻
我想把他改写成 多数 数值寻找
意思 就是
当我 输入 16 进位 多个
EX: "FF FC DA EE CD EE 12"
我想要把 这段在记忆体中 搜寻他的位置 , 而我只能搜寻到 第二个 BYTES 超过之後
却只会停留在第二个 位置....
请教前辈 该怎麽改写 ?
下面是我稍微改写 的 程式码..
'======================================
Dim mysearch1() As String = Split(Trim(TextBox7.Text), " ")
Dim mysearch(mysearch1.Length - 1) As Byte
'======================================
Dim mbi As MEMORY_BASIC_INFORMATION
Dim BassAddr() As Integer = {0}
Dim PageSize() As Integer, PageNum As Integer
Dim tmpBassAddr As Integer, lBassAddr As Integer
Dim big As Integer = &H400000 '取最小的搜寻位置
Dim testnum, testnum2 As Integer
Dim data() As Byte
Dim i, j, k, n As Integer
ListBox3.Items.Clear()
Do While VirtualQueryEx(hProcess, lBassAddr, mbi, Len(mbi))
tmpBassAddr = mbi.BaseAddress
If tmpBassAddr > big Then
'取得最小位置
'tmpBassAddr = tmpBassAddr + mbi.RegionSize
If tmpBassAddr > &H7FFF0000 - 1 Then
Exit Do
End If
If mbi.State = MEM_COMMIT Then
If mbi.Protect And (PAGE_READWRITE Or PAGE_EXECUTE_READWRITE Or
PAGE_EXECUTE_WRITECOPY) Then
ReDim Preserve BassAddr(PageNum)
ReDim Preserve PageSize(PageNum)
BassAddr(PageNum) = mbi.BaseAddress
PageSize(PageNum) = mbi.RegionSize
PageNum = PageNum + 1
End If
End If
End If
tmpBassAddr = tmpBassAddr + mbi.RegionSize
lBassAddr = tmpBassAddr
Loop
'开始搜寻
For i = 0 To mysearch.Length - 1
If mysearch1(i) <> "?" And mysearch1(i) <> "??" And mysearch1(i) <>
"**" Then
mysearch(i) = CByte(Convert.ToInt32(mysearch1(i), 16)) '转16进位
End If
Next
Dim mysearch_num As Integer = mysearch.Length
For i = 0 To PageNum - 1
ReDim Data(PageSize(i))
TestRPM(hProcess, BassAddr(i), Data, PageSize(i), 0&)
For j = 0 To PageSize(i)
If data(j) = mysearch(mysearch_num - 1) Then
mysearch_num = +1
For j1 = 1 To mysearch_num
If data(j + j1) = mysearch(mysearch_num) Then
ListBox3.Items.Add(Hex(BassAddr(i) + j))
Application.DoEvents()
End If
Next
End If
Next
Next
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.36.34.140