2010-02-16 2 views
3

Intel x86 컴퓨터에서 Windows XP를 실행 중이고 메모리 위치 0x00000001의 명령어에 오류가 있습니다.Windows XP를 실행하는 Intel x86 컴퓨터의 메모리 위치 1은 무엇입니까?

나는 오류를 디버깅하는 것에 대해 걱정하지 않지만, 일반적으로 매우 구걸하는 지침이 무엇인지 알기를 바랍니다.

저수준 코드를 작성한 유일한 프로세서는 PIC 마이크로 컨트롤러이며, 첫 번째 메모리 위치는 GOTO와 인터럽트 벡터라는 것을 알고 있습니다.

+1

아래 페이지에서 그래픽을 참조하십시오. – starblue

답변

6

Windows는 메모리의 처음 64k와 마지막 64k가 항상 읽기 또는 쓰기 액세스 위반을 일으키는 것을 보증합니다. 이렇게하면 널 포인터 역 참조를 더 쉽게 감지 할 수 있습니다.

인터럽트 벡터가있다 (원래 8086 일명) 리얼 모드에서 제목

, 무료 예약 및 커밋 된 가상 메모리

http://msdn.microsoft.com/en-us/library/ms810627.aspx

+3

명확해야 함 : 보증은 약한 보증입니다. 유효한 메모리를 가상 위치 0에 매핑하는 것이 가능합니다. 그렇게함으로써 악용 된 몇 가지 권한 상승 취약점이있었습니다. 그러나 기본적으로 가상 메모리의 처음 64K는 항상 0입니다. –

+0

@ Larry : 그 뒤에 이야기가있을 것입니다. 메모리를 권한이 부여 된 프로세스로 매핑 할 수 있다면 모든 것을 제어 할 수 있습니다. 널 포인터 참조를 시도하고 악용 할 필요는 없습니다. –

+2

RCE가 아니라 EoP를 생각하십시오. 이것의 좋은 예가 Mark Dowd의 플래시 공격입니다 : http://chargen.matasano.com/chargen/2007/7/3/this-new-vulnerability-dowds-inhuman-flash-exploit.html. 필요한 것은 커널에서 할당이 성공했는지 확인하지 않는 할당 된 구조에 기록하는 커널의 취약점입니다. 할당이 실패 할 경우 (큰 버퍼를 통과시킴으로써) 때때로 커널이 메모리의 임의의 위치에 쓸 수 있습니다. –

3

실제 실제 주소 공간 000001이 아닙니다. XP는 현대적인 virtual paged memory OS이므로 각 응용 프로그램마다 고유 한 주소 공간을 갖습니다.

3

프로세스의 주소 공간의 제로 페이지가 널 포인터 오류를 감지하는 데 도움이되도록 의도적으로 Windows에서 액세스 할 수 없다고 생각합니다.이 경우에는 아무 것도 없습니다.

관련 문제