Страница: 1 |
Страница: 1 |
Вопрос: Адреса ячеек памяти
Добавлено: 04.02.09 15:21
Автор вопроса: Djon | Web-сайт:
Всем привет.
У меня проблема.
Вот код
BaseAddress As Long 'Указатель на базовый адрес для указанного диапазона страниц
AllocationBase As Long 'Указывает на базовый адрес региона памяти.
AllocationProtect As Long 'Указывает на атрибуты защиты, которые были присвоены региону при его резервировании.
RegionSize As Long 'Задает/
'Возвращает размер диапазона памяти, который начинается по адресу BaseAddress и имеет и имеет те же самые атрибуты, что и первая страница.
State As Long 'Задает/Возвращает состояние страниц в указанном регионе.
Protect As Long 'Указывает на атрибуты защиты страниц региона памяти, начинающегося по адресу BaseAddress.
Type As Long 'Указывает на тип страниц заданного региона.
End Type
'-----------------------------------------------------------------------------------------
Private meminfo As MEMORY_BASIC_INFORMATION
Private buf As Long '
Private str(10000) As String '
Private wName As String '
'-----------------------------------------------------------------------------------------
Private hw As Long 'Хэндл окна
Private PID As Long 'Идентификатор процесса
Private GWTPI As Long 'Возврат функции GetWindowThreadProcessId
Private hProc, hProcess As Long 'Хэндл процесса
Private RPM As Long 'Возврат функции ReadProcessMemory
Private dwReaded As Long 'Кол-во прочитанных байт
Private VQE As Long 'Возврат функции VirtualQueryEx
Private RegionAdress() As Long 'Массив адресов регионов процесса
Private Cyc As Long '
Private totalReg As Long '
Private R As Long '
'------------------------------------------------------------------------------------------
Private Const PROCESS_QUERY_INFORMATION = &H400
Private Const PROCESS_VM_READ = &H10
Private Const PROCESS_VM_WRITE = &H20
Private Const PROCESS_VM_OPERATION = &H8
Private Const PROCESS_VM = PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE
Private Sub ScanPages()
hw = FindWindow(vbNullString, "Сапер")
If hw > 0 Then
GWTPI = GetWindowThreadProcessId(hw, PID)
hProc = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM, 0, PID)
VQE = VirtualQueryEx(hProc, 0, meminfo, LenB(meminfo))
R = 0
Erase RegionAdress()
Do
DoEvents
R = R + 1
ReDim Preserve RegionAdress(R)
RegionAdress(R) = RegionAdress(R - 1) + meminfo.RegionSize
VQE = VirtualQueryEx(hProc, RegionAdress(R), meminfo, LenB(meminfo))
Combo4.AddItem (RegionAdress(R))
Loop While RegionAdress(R) < &H7FFEFFFF
Text5 = R
CloseHandle (hProc)
Else
MsgBox "", vbCritical, ""
End If
End Sub
Дело в том что я хочу найти все адреса всех ячеек памяти. Код выполняется но находятся почемуто не все адреса. Где я ошибся подскажите пожалуйсто
Ответы
Всего ответов: 15
Номер ответа: 1
Автор ответа:
GDK
Вопросов: 13
Ответов: 348
Профиль | | #1
Добавлено: 05.02.09 12:31
Просто замечание:
Private hProc, hProcess As Long 'Хэндл процесса
hProc объявлен как Variant
Номер ответа: 2
Автор ответа:
Smith
ICQ: adamis@list.ru
Вопросов: 153
Ответов: 3632
Профиль | | #2
Добавлено: 05.02.09 13:44
во первых прозрачный до нельзя, а во вторых можно понтоваться, что написал много много метров исходников
Номер ответа: 3
Автор ответа:
Djon
Вопросов: 61
Ответов: 471
Web-сайт:
Профиль | | #3
Добавлено: 05.02.09 17:50
а как нужно?
Номер ответа: 4
Автор ответа:
GDK
Вопросов: 13
Ответов: 348
Профиль | | #4
Добавлено: 06.02.09 11:59
Ну я думал про
"Private hProc, hProcess As Long 'Хэндл процесса "
что имелось ввиду
"Private hProc As Long, hProcess As Long 'Хэндл процесса"
или оно же
"Private hProc As Long
Private hProcess As Long"
Номер ответа: 5
Автор ответа:
Djon
Вопросов: 61
Ответов: 471
Web-сайт:
Профиль | | #5
Добавлено: 11.02.09 14:30
Ни кто ни чего не подскажет?
Номер ответа: 6
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #6
Добавлено: 11.02.09 20:26
А какие адреса не находятся?
Номер ответа: 7
Автор ответа:
Djon
Вопросов: 61
Ответов: 471
Web-сайт:
Профиль | | #7
Добавлено: 15.02.09 20:41
С помощью артмании я находил "счетчик времени" в "Сапере" &H100579C
А мой код этот адрес не находит.
Номер ответа: 8
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #8
Добавлено: 15.02.09 21:17
Адрес или интервал адресов?
Номер ответа: 9
Автор ответа:
Djon
Вопросов: 61
Ответов: 471
Web-сайт:
Профиль | | #9
Добавлено: 15.02.09 22:37
адрес
Номер ответа: 10
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #10
Добавлено: 15.02.09 22:45
значит алгоритм крив...
не находит всмысле не читает этот адрес, или алгоритм поиска самописный не работает?
Номер ответа: 11
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #11
Добавлено: 16.02.09 13:23
VirtualQueryEx выдает интервал адресов, а не адрес.
Номер ответа: 12
Автор ответа:
Djon
Вопросов: 61
Ответов: 471
Web-сайт:
Профиль | | #12
Добавлено: 16.02.09 18:42
Значит я запутался.
Sharp, у меня VirtualQueryEx выдаёт много значений.
Если эти числа интервал, подскажите, как из этого интервала извлеч все адреса?
Номер ответа: 13
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #13
Добавлено: 16.02.09 18:47
гугл "VirtualQueryEx+пример" лает второй или третьей ссылку
http://wm-help.net/books-online/book/59464/59464-7.html
Номер ответа: 14
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #14
Добавлено: 16.02.09 22:19
.BaseAddress это начало интервала, а .RegionSize его размер.
Номер ответа: 15
Автор ответа:
Djon
Вопросов: 61
Ответов: 471
Web-сайт:
Профиль | | #15
Добавлено: 18.02.09 17:17
Sharp, большое тебе спасибо.