데이터를 추출하기 위해 기존 응용 프로그램의 "분로 (shunt)"를 작성하려고 노력 중이므로 수행하려고하는 일부 분석에 데이터를 통합 할 수 있지만 막 다른 골목에 섰습니다. 나는 내가 읽고 자하는 지침을 격리 시켰지만, 정확히 이것을 수행하는 방법을 잘 모르겠습니다. 다음과 같은 결과가 동일한 변수 3 개의 메모리 스캔프로세스에 연결하고 특정 지침을 읽으려면 어떻게해야합니까?
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
이
는 (특히00412159
의 값) 내가 격리려고 명령어 세트 인
실행중인 프로그램에 디버거를 연결하면 원하는 값은 EAX이지만 대상 프로세스가 다시 시작될 때마다 EAX 값이 변경됩니다.
분명히 내가 쓴 것은 DMA (동적 메모리 액세스)라고도하는 힙 기반 메모리 할당이며 이로 인해 런타임에 포인터 매핑이 생성됩니다. 주제에 대한 간단한 연구는 내가 알아야 할 두 가지 구성 요소가 정적 기본 포인터와 런타임 포인터에 도달하는 데 사용 된 오프셋이라는 것을 밝힙니다.
저는 ASM과 총 4 시간의 experiance를 보냈습니다. 내 문제 일 수도 있고, 현재 내 리그에서 벗어난 문제를 다루는 것일 수도 있습니다. 00412159
에서 지침의 가치를 읽는 가장 좋은 방법에 대한 아이디어 또는 기본 포인터와 오프셋을 찾는 방법에 대한 제안?
"특정 명령을 읽는 것"이 의미하는 바를 명확하게 설명해 주시겠습니까? "메모리 스캔"이란 무엇입니까? 당신이 그것을 사용하는 방식은 오히려'00412159'에있는 명령에 의해 액세스 된 데이터를 검사하고 싶다고 생각하게 만듭니다. 그리고 브레이크 포인트에 도달 할 때마다이 데이터에 액세스하기 위해 사용 된 레지스터가 변경된다는 것에 놀랐습니까? –