|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
26.08.2016, 22:25 | #1 |
Форумчанин
Регистрация: 20.04.2009
Сообщений: 136
|
Поиск строки в памяти процесса
Ищу строку в программе, с заголовком окна Form1. В результате, ничего не находит, хотя программа с таким окном открыта, и в ней есть переменная AnsiString = 'test'.
Код: Код:
|
26.08.2016, 22:56 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
а вы отладкой не проходили?
поищее у вас первая же итерация выйдет из цикла и никакого сканирования не будет. память процесса не занята целиком, посмотрите в том же ArtMoney или CheatEngine карту процесса. вам надо получать список областей памяти и уже их сканировать. + у вас ошибка работы с памятью. память не является строкой, и Pos к ней не подойдет. PS: перенес вашу тему, тут явно уже не паскаль Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
27.08.2016, 11:56 | #3 | ||
Форумчанин
Регистрация: 20.04.2009
Сообщений: 136
|
Цитата:
Цитата:
|
||
27.08.2016, 12:09 | #4 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
просто вы трактуете буфер как одну большую строку, а он ей не является. если страница окажется забита вся(не будет иметь нулевые символы в себе), ваш Pos вылетит в AV, ибо терминал это #0 для таких строк. если в буфере будет несколько строк, он опять же дойдет лишь до первого #0, и все. ну кстати, странно работать с PChar, ища AnsiString Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
27.08.2016, 16:53 | #5 | |
Форумчанин
Регистрация: 20.04.2009
Сообщений: 136
|
Цитата:
Если вопрос в разбиении строки на символы, то мне так проще. Есть возможность отлаживать, просматривая, какие строки поиск подцепляет ещё. Про, PChar(@Buf[i])^ да, оставил сейчас просто Buf[i], для получения символа по индексу работает... |
|
27.08.2016, 18:04 | #6 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
размер у них разный.
Цитата:
но повторю третий раз, память не является строкой. кусок памяти да, но не произвольный. покажу наглядно 00 00 00 00 8F 7F 01 00 00 00 00 00 80 7B 01 00. допустим вы выцепили такой кусок памяти.(это хекс если что) и допустим вы ищете этот самый(8F 7F 01). из-за того что вы трактуете памяти как PChar/PAnsiChar строка считается до первого нуля, то есть 00 00/00. итого никакого поиска нет. если так хотите поучится посмотрите исходники CheatEngine. или на край, если хотите работать со строками, то работайте с ними полноценно, а не с указателем на символ PChar/PAnsiChar, у которых признак конца это символ #0. хотя тут конечно есть нюанс реализации Pos(для полноценных строк я ее не помню, тормозит оно на длине или на нуле все же) а прочитать все внутрь AnsiString проблем нет Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. Последний раз редактировалось Пепел Феникса; 27.08.2016 в 18:16. |
|
27.08.2016, 22:45 | #7 |
Форумчанин
Регистрация: 20.04.2009
Сообщений: 136
|
Пепел Феникса, я может Вас не правильно понимаю, или не правильно объяснил, как я выполняю действия.
Есть кусок в памяти: Buf = 00 00 00 00 54 65 73 74 00 00 00 00 00 80 7B 01 00. Я ищу строку S = 'Test'. Делаю примерно так: Код:
Разве такой способ является некорректным? Возможно я на самом деле что-то не понимаю, так как с памятью и указателями обычно редко приходится сталкиваться... Последний раз редактировалось Alexan-Dwer; 27.08.2016 в 22:48. |
28.08.2016, 15:09 | #8 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
в вашем первом коде есть только стандартная Pos.
так, в принципе и нужно, искать первый символ, следующий за ним должен быть второй и тп. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Оперативная память и WinAPI (поиск строки в памяти процесса) | Кирилл Романов | Win Api | 5 | 12.05.2015 22:44 |
Чтение памяти процесса (поиск адресов) | xRamzeSx | Общие вопросы Delphi | 0 | 12.01.2014 13:10 |
Поиск в памяти процесса | Mr_ViK | Общие вопросы Delphi | 5 | 27.08.2012 21:38 |
Поиск сигнатуры в памяти процесса | Crystallon | Общие вопросы Delphi | 8 | 26.09.2011 23:01 |
Защита памяти процесса. | worldhero | Фриланс | 2 | 25.07.2010 11:15 |