Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменить значение в памяти 
:(
    Опции темы
lollollollol
Дата 25.6.2013, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 287
Регистрация: 12.3.2013

Репутация: нет
Всего: нет



Суть вопроса такая, не могу разобраться как можно изменить значение в запущеной программе.

Есть delphi программа где используется asm вставка. Винда 7 32 бита.
В програме на форме есть текст. Его адрес статичен и заранее найден программой WinHEX.

Как asm кодом можно изменить символ "a" на символ "b", зная что символ распологается по определённоу адресу(ну это в не запущеной программе, а когда запустишь её, ведь адрес другой будет, для начал могу найти адрес отладчиком типа ollybdg, потом подумаю о поиске)

Прошу подсказать, буду очень благодарен, спасибо
PM MAIL   Вверх
lollollollol
Дата 26.6.2013, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 287
Регистрация: 12.3.2013

Репутация: нет
Всего: нет



C этим разобрался

Код

label
  lb;
asm
mov EDI,4033c1h
lb:
cmp [EDI],'a'
jmp @IfNot;
mov [EDI],'b'
@IfNot:
inc EDI
cmp EDI,413300h
jmp @IfExit;
jmp @IfDone;
@IfExit:
jnz lb
@IfDone:


но стало только больше вопроосов.
Как узнать начало памяти процесса для поиска в нём? вписал адрес из дебагера, запустил цыкл, но никаких результатов, ниодного срабатывнмя 
mov [EDI],'b'

очень прошу, помогите разобраться

Добавлено через 3 минуты и 33 секунды
И нужно ли использовать тут byte ptr?

Код

cmp [EDI],'a'
или
cmp byte ptr[EDI],'a'

PM MAIL   Вверх
lollollollol
Дата 26.6.2013, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 287
Регистрация: 12.3.2013

Репутация: нет
Всего: нет



Надо же, какое оживлённое обсуждение вопроса...
PM MAIL   Вверх
DarthTon
Дата 1.7.2013, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 106
Регистрация: 7.2.2009

Репутация: нет
Всего: 6



Код

    mov edi, 4033c1h
    mov ecx, 413300h
    mov eax, 'a'
    mov edx, 'b'

checkloop:
    cmp byte ptr [edi], al
    jz found

    add edi, 1
    cmp edi, ecx     
    jnz checkloop
    jmp not_found

found:
    mov byte ptr [edi], dl

not_found:


Я же надеюсь код исполняется в контексте целевого процесса, а не отдельного?

Цитата

Как узнать начало памяти процесса для поиска в нём?


1. Получить минимальное и максимальное допустимые значения адресного пространства при помощи GetSystemInfo
2. Перебирать регионы памяти по очереди при помощи VirtualQueryEx
3. Если регион имеет флаг MEM_COMMIT (ещё опционально можно проверять PAGE_READWRITE чтобы отсеять read-only регионы), искать требуемую строку в регионе.

Это сообщение отредактировал(а) DarthTon - 1.7.2013, 18:06
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0415 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.