|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
02.07.2013, 22:14 | #31 |
Форумчанин
Регистрация: 23.03.2013
Сообщений: 218
|
Вот весь код программы, конечная цель добраться до 'qwerty', и поменять это значение в памяти
Код:
Последний раз редактировалось lollollollol; 02.07.2013 в 22:17. |
02.07.2013, 23:56 | #32 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
А вы уверены, что не выходите за пределы региона в следующий?
a<lpBuffer.RegionSize а потом есть a + 1 и a + 2. Что будет, когда дойдем до конца блока? |
03.07.2013, 00:20 | #33 |
Форумчанин
Регистрация: 23.03.2013
Сообщений: 218
|
Ну вероятность этого очень мала, ведь для того чтобы выйти за границы последний символ должен быть 'q', или 'qw'.
В строке Код:
while (a<lpBuffer.RegionSize-1) do begin и ошибка ушла, но оно не находит даже последовательность из первых двух символов, что очень странно. Да и непонимаю, почему с lpBuffer.RegionSize-1 работает. Допустим lpBuffer.RegionSize = 2. В этом случае цикл выполнится как и положено, 2 раза. (a=0, a=1), а сейчас у меня цикл выполняться на один раз меньше |
03.07.2013, 00:44 | #34 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
REgionSize кратно 4096 будет. так же еще есть такая вещь что изначально константные данные могут лежать в readonly области. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
03.07.2013, 00:51 | #35 |
Форумчанин
Регистрация: 23.03.2013
Сообщений: 218
|
WinHexом посмотрел точный адрес, и как результат этот код выдаёт ошибку
Код:
ну и в довесок, то что пишет в переменную VirtualQuery lpBuffer.State =65536 lpBuffer.Protect=1 или я совсем торможу, винхекс адрес в ехе на диске показывает, а не в памяти как можно адрес в памяти посмотреть? Последний раз редактировалось lollollollol; 03.07.2013 в 00:54. |
03.07.2013, 01:11 | #36 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
03.07.2013, 08:39 | #37 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Задача:
Размер блока - 4096 байт. Последний байт блока равен 'q'. Первый вопрос - чему будет равно а, когда мы найдем 'q'? Второй вопрос - чему будет равно смещение при проверке на 'w'? Третий вопрос - где будет находится предполагаемый адрес, где лежит 'w'? Четвертый вопрос - почему приведенный вами пример (RegionSize - 1) неправильный? Пятый вопрос - почему вы решили, что q и w будут в двух последовательных байтах памяти? Что такое Unicode знаете? Напишите процедуру поиска в памяти отдельно, отладьте и настройте чтоб работала и только потом читайте блоки памяти. Сейчас вы не можете понять где у вас ошибка - в поиске текста или в обходе блоков памяти. Последний раз редактировалось waleri; 03.07.2013 в 08:43. |
03.07.2013, 10:39 | #38 |
Форумчанин
Регистрация: 23.03.2013
Сообщений: 218
|
Первый вопрос - 4095?
Второй вопрос - а разве одна строка может по частям находиться в разных блоках? Третий вопрос - по идеи +1 байт, или нет? как быть с юникодом? Четвертый вопрос - незнаю Пятый вопрос - я так решил потому что это одна строка, про юникод даже не думал А можно заранее узнать адрес который нужно изменит? чтобы он везде при запуске был один? |
03.07.2013, 12:12 | #39 |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,834
|
Предлагаю хотя бы минимально ознакомиться с организацией памяти в Windows, образами PE и их отображением. Без этих знаний разговор беспредметный.
В разработке: воспроизводственный контур ИТ
|
03.07.2013, 20:12 | #40 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Угу... а на каком адресе будут лежать e, r, t, и т.д. Напишите абсолютные адреса, а не +1, +2 и т.д. За основу берите адрес q который, как мы уже знаем из первого вопроса находится по адресу 4095. Неужели все еще не понятно в чем проблема?
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Delphi XE2 работа с памятью процесса | YCA4 | Win Api | 2 | 18.02.2012 19:26 |
Работа с памятью | mufesto | Win Api | 1 | 30.01.2012 15:13 |
Смертоубийство своего процесса | Johnson | Win Api | 7 | 23.08.2011 19:29 |
Работа с памятью процесса | JRcoker | Win Api | 10 | 18.07.2009 22:22 |
Работа с памятью запущенного процесса | DeniCPP | Общие вопросы C/C++ | 2 | 09.04.2009 12:38 |