|
2 / 2 / 0
Регистрация: 31.10.2013
Сообщений: 17
|
||||||
Оперативная память и WinAPI (поиск строки в памяти процесса)22.04.2015, 09:53. Показов 15773. Ответов 37
Метки нет (Все метки)
Здравстуйте.
Работаю с оперативной памятью и WinApi. Пытаюсь найти строчку в памяти запущенного процесса. Естественно не получается. Код скинул ниже.
1
|
||||||
| 22.04.2015, 09:53 | |
|
Ответы с готовыми решениями:
37
Поиск Строки в памяти процесса Поиск строки в памяти другого процесса Поиск строки в памяти запущенного процесса и её изменение |
|
Ушел с форума
|
|||
| 29.01.2016, 14:04 | |||
![]()
0
|
|||
|
-1 / 8 / 6
Регистрация: 31.10.2015
Сообщений: 151
|
||||||
| 29.01.2016, 19:05 | ||||||
|
Убежденный, просто без слипа, он за секунду жрал всю оперативку)) А ищу я правильно?
Добавлено через 4 часа 14 минут Убежденный,
0
|
||||||
|
Ушел с форума
|
|
| 30.01.2016, 07:04 | |
|
Убери работу с регионами, они для поиска в памяти не нужны и только запутывают код.
У тебя есть адресное пространство диапазоном примерно 0-0x7FFFFFFF, поделенное на страницы размером в 4К, отсюда и нужно "плясать": берешь по порядку каждую страницу, смотришь ее атрибуты (VirtualQueryEx), если подходит - выполняешь в ней поиск, потом переходишь к следующей странице. Все. Дополнительно можно учесть ситуацию, когда искомая строка попадает на границу двух страниц, но это детали. P.S. В любом случае такой поиск не будет быстрым, а в 64-битных процессах может вообще занимать часы.
0
|
|
|
232 / 135 / 19
Регистрация: 10.11.2015
Сообщений: 305
|
||||||||
| 30.01.2016, 10:44 | ||||||||
0
|
||||||||
|
Ушел с форума
|
|
| 30.01.2016, 15:31 | |
|
0
|
|
|
232 / 135 / 19
Регистрация: 10.11.2015
Сообщений: 305
|
|||||||||||||||
| 30.01.2016, 19:35 | |||||||||||||||
|
Убежденный, хмм, я видимо чтото не догоняю, смотрите вот набросал код:
Вот описание MBI из MSDN: MEMORY_BASIC_INFORMATION. Цитаты:
Вот более наглядный пример:
1
|
|||||||||||||||
|
Ушел с форума
|
||
| 30.01.2016, 20:16 | ||
|
jupman, да, ты совершенно прав!
А у меня, оказывается, серьезный пробел в понимании регионов виртуальной памяти: я-то думал, что они описывают блок, выделенный ранее с помощью VirtualAlloc(Ex), но атрибуты страниц внутри блока при этом якобы могут различаться, обычно в результате VirtualProtect(Ex) или page fault на guard page. Был не прав, снимаю шляпу. ![]() Подтверждение из MSDN: VirtualQuery function https://msdn.microsoft.com/en-... s.85).aspx
0
|
||
|
232 / 135 / 19
Регистрация: 10.11.2015
Сообщений: 305
|
||
| 30.01.2016, 21:19 | ||
|
Убежденный, я как вот это увидел:
Т.к. сам не так давно делал ту же задачу что и ТС и у меня сканер за несколько минут успевал закончить на X64 ОС (сканил все процессы).DaVillka, дам вам такие советы: 1) Не нужно в цикле каждый раз выделять освобождать и память. Выделите память перед циклом, чем больше тем меньше ReadProcessMemory вызывать придется а след-но выиграйте по скорости. Если MBI.RegionSize больше чем ваш буфер читаете один кусок, затем следующий. Ну вы поняли. 2) Проверка атрибутов. Да конечно например если встретите PAGE_NOACCESS ничего страшного, ReadProcessMemory просто сфэйлит, но зачем её вызывать если можно отсеить проверкой флагов. PAGE_GUARD думаю тоже стоит проверять, иначе вы получается сбрасывать будете данный флаг в чужом процессе, что не есть хорошо. Ну и то что MBI.State == MEM_COMMIT должно быть это понятно. 3) Ну и если не хотите проц грузить слип все таки нужен. Только не нужно его при каждой интеграции цикла вызывать. Я например делал Sleep(1) через каждые 30 просканеных страниц страниц. Ну или приоритет процессу вашему меняйте. PS: Ну и добавлю, может пригодится. Если вдруг потребуется сканить X64 процессы из X32 процесса, то для этого есть функции NtWow64QueryVirtualMemory64/NtWow64ReadVirtualMemory64. Они работают от XP до 8, выше не проверял.
2
|
||
| 30.01.2016, 21:27 | |
|
0
|
|
| 30.01.2016, 21:41 | |
|
0
|
|
|
232 / 135 / 19
Регистрация: 10.11.2015
Сообщений: 305
|
||
| 11.02.2016, 17:16 | ||
Приходится Heaven's Gate использовать.
0
|
||
|
Ушел с форума
|
|
| 11.02.2016, 18:39 | |
|
Про Heaven's Gate можно забыть из-за Control Flow Guard.
1
|
|
|
232 / 135 / 19
Регистрация: 10.11.2015
Сообщений: 305
|
|
| 12.02.2016, 00:42 | |
|
Убежденный, Спасибо. Вообще тестил уже на Win 10 все работает. Скачал доку по CFG, буду разбираться что за зверь.
Добавлено через 2 часа 47 минут Убежденный. Ну у меня норм работает т.к. я без опции /guard:cf компилирую, у меня данный механизм отключен. Да и если уж нужен этот CFG можно ведь отдельно Heaven's Gate откомпилировать (без /guard:cf). Или я что-то не догоняю? Добавлено через 6 минут Т.е. получается для той части кода которая компилируется без CFG, компилятор ненавтыкает LdrpValidateUserCallTarget'тов. Верно? Ведь именно данная функция как я понял возбуждает исключения если адрес не описан в cfg bitmap.
0
|
|
|
Ушел с форума
|
||
| 12.02.2016, 08:37 | ||
|
где включен CFG.
0
|
||
|
232 / 135 / 19
Регистрация: 10.11.2015
Сообщений: 305
|
|
| 12.02.2016, 13:50 | |
|
Убежденный, а, понял. Т.е. получается если я сделаю инжект в процесс с включенным CFG я не смогу использовать Heaven's Gate. Но ведь в моем внедренном коде не будет проверок (LdrpValidateUserCallTarget), почему должны быть проблемы? И не подскажете есть ли в Windows 10 какой-нибудь процесс с включенным CFG (но выключенным "Disable Dynamic Code"). Хочу потестить, а то у меня старая студия (нет поддержки /guard:cf) и я не могу подходящий exe собрать.
0
|
|
|
Ушел с форума
|
|||
| 12.02.2016, 13:54 | |||
|
А вот Disable Dynamic Code включен только для services.exe, csrss.exe и smss.exe, если не ошибаюсь. Да это все легко самому сварганить, см. функции Get/SetProcessMitigationPolicy, UpdateProcThreadAttribute и т.п. Все нужные структуры есть в последних версиях WDK/SDK. -------- Если будут какие-нибудь любопытные результаты скрещивания CFG с Heaven's Gate - напиши, пожалуйста, а то я эту тему особо не ковырял еще, так, знаю понаслышке...
1
|
|||
|
232 / 135 / 19
Регистрация: 10.11.2015
Сообщений: 305
|
|
| 12.02.2016, 20:41 | |
|
0
|
|
|
232 / 135 / 19
Регистрация: 10.11.2015
Сообщений: 305
|
|
| 14.02.2016, 03:09 | |
|
Убежденный, native-api в Heaven's Gate по прежнему можно вызывать. Тестил в контексте cmd.exe (у него в DLL characteristics установлен IMAGE_DLLCHARACTERISTICS_GUARD_CF (0x4000) а значит есть CFG). Нельзя юзать APC, исключения, грузить либы. Что особо и нужно на мой взгляд, nt вполне должно хватать. Ну если уж нужно либу там прогрузить, то может стоит попробовать LoadConfig->GuardCFCheckFunctionPointer перехватить у ntdll (туда система адрес LdrpValidateUserCallTarget кладет). Не знаю поможет или нет, не стал пробовать.
Неплохая статья : “Closing Heaven’s Gate”
2
|
|
| 14.02.2016, 03:09 | |
|
Виртуальная память процесса, функции WinAPI Совместимость оперативной памяти - Оперативная память После замены оперативной памяти компьютер перезагружается / Оперативная память Оперативная память для RYZEN, тест памяти DDR4. Одноканальность/двухканальность Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|