Я пытаюсь написать «шунт» для существующего приложения для извлечения данных, чтобы я мог интегрировать его в некоторый анализ, который я пытаюсь выполнить, но я зашел в тупик. Я выделил инструкцию, которую хочу читать, но я не совсем уверен, как это сделать.Как подключиться к процессу и прочитать его из определенной инструкции?
Это набор инструкций Я пытаюсь изолировать (в частности, значение от 00412159
):
00412153 - mov [eax+04],edx
00412156 - fld dword ptr [ecx+08]
00412159 - fstp dword ptr [eax+08]
0041215c - ret
0041215d - int 3
Результаты трех сканирований памяти для одной и той же переменной, привела к следующим результатам:
EAX=1798B4E0
ECX=0018D5C0
EDX=00000016
EAX=18D96298
ECX=0018D5C0
EDX=00000016
EAX=18D3DCA8
ECX=0018D5C0
EDX=00000016
Если я присоединяю отладчик к запущенной программе, то значение, которое я хочу, находится в EAX, но значение EAX изменяется каждый раз, когда целевой процесс перезапускается.
Очевидно, что я работаю с DMA (Dynamic Memory Access), а также с распределением памяти на основе кучи, и это приводит к формированию отображения указателя во время выполнения. Мое краткое исследование этого предмета показывает, что два компонента, которые мне нужно выяснить, - это статический базовый указатель, а смещение используется для достижения указателя времени выполнения.
Я провел в общей сложности 4 часа опыта с ASM, так что это может быть моя проблема, или я просто решаю проблему, которая в настоящее время выходит из моей лиги. Любые идеи о лучшем способе чтения значения из инструкции на 00412159
или предложения о том, как найти базовый указатель и смещение?
Не могли бы вы пояснить, что вы подразумеваете под «чтением с определенной инструкции»? Что вы подразумеваете под «сканированием памяти»? То, как вы его используете, заставляет меня думать, что вы хотите проверить данные, полученные по инструкции на `00412159`, и вы удивлены тем, что регистр, используемый для доступа к этим данным, изменяется каждый раз, когда вы нажимаете точку останова? – 2010-12-02 13:42:29