2009-10-17 3 views
0

내 프로세스의 특정 주소 범위 내에 소량의 메모리를 쓰고 싶습니다. 메모리특정 주소 범위 내에서 사용 가능한 메모리를 찾는 방법

  • 량이 할당 할 : 주소 5 bytes
  • 가 하한 : 0x 00 40 00 00
  • 상부 주소 바인딩 : I가하려는 0x 00 A0 00 00

범위 쓰기 위해 이미 프로세스에 의해 할당됩니다. 따라서 단순히 새로운 mem을 VirtualAlloc으로 할당 할 수는 없습니다.

그러나 원하는 주소 공간의 페이지는 프로그램 코드로 사용되기 때문에 100 % 사용되지는 않습니다. 내 5 바이트를 쓸 수있는 충분한 공간이 있습니다.

필요한 메모리를 덮어 쓰지 않도록하려면 어떻게해야합니까?

+6

필수 : ​​왜? – GManNickG

+0

작은 코드 동굴을 숨길 곳을 찾는 것처럼 들리는군요. – mrduclaw

+0

사실. jmp 명령을 삽입하여 더 많은 저장소가있는 다른 위치로 이동할 수있게하려고합니다. 내가 직접 호출 할 수 없으므로 (=> 범위 검사) 그런 방법을 사용해야합니다. – Etan

답변

3

나는 당신이 원하는 것을 훌륭하고 일반적인 방법으로 생각하지 않습니다. Windows에 대해 이야기하고 기본 위치에서 PE를로드하는 위치에있는 것처럼 보이므로 여기서는 몇 가지 가정을 만들어 도움을줍니다.

PE 헤더를 구문 분석하려는 경우 일반적으로 여기에 여유 공간을 찾을 수 있습니다. 섹션 사이의 영역과 기능 이전의 영역을 확인하십시오. 응용 프로그램을 작성한 방법에 따라 함수 사이에 INT3로 채워지는 영역이 있으면 원하는 부분에 충분할 것입니다.

구체적으로 수행하려는 작업에 대한 정보를 제공해 주시면 더 많이 도움이 될 것입니다. 당신은 그것을로드하기 전에 바이너리를 패치 할 수 있습니까? 아니면 런타임에 모든 것을해야합니까?

+0

필자는 샘플 바이너리에서 코드 동굴 탐사 방법을 배우기를 원합니다. 나는 함수 앞에 5 개의 INT3을 발견했다. 그들은 필요하지 않습니까? 이 Opcode (디버그 용인 것 같습니다) – Etan

+0

IIRC, INT3이 있으므로 실수로 EIP를 가리킨 경우 프로그램이 충돌합니다 (경계 밖의 문자열 또는 그와 같은 것). 따라서, 어쨌든 프로그램의 무결성을 위반할 것이므로 실제로는 필요 없습니다. – mrduclaw

+0

크래시가 아닌 디버그 브레이크. –

관련 문제