2011-08-06 2 views
-2

안녕하세요. 도움을 주셔서 감사합니다.ecx 레지스터에 기록하면 Windows 7에서 "액세스 위반"이 발생합니다.

내 C++ 코드에서 일부 임베디드 어셈블러 코드가 있고 [mov ecx, 1AF858h] 줄에 "액세스 위반"이라는 오류 메시지가 계속 나타납니다. Windows XP에서는 완벽하게 작동하지만 불행하게도 Windows 7에서는 작동하지 않습니다.

문제의 원인을 이해하지 못하고이를 해결하기 위해 무엇을해야하는지 알고 싶습니다.

종류 안부, 데이비드

+0

대단히 많이 달라집니다. 더 많은 코드를 보여주십시오. 또한 두 경우 모두에서 32 비트 대상으로 코드가 컴파일됩니까? –

+3

Visual Studio 인라인 어셈블리는 32 비트 모드에서만 사용할 수 있습니다. 클래스 안에서 ECX 레지스터는'this' 포인터를 가지고있다. 변경하면 "재미있는"효과가 발생할 수 있습니다. –

+1

'mov ecx, [1AF858h]'가 아닌'[mov ecx, 1AF858h]'입니까? 후자의 경우 주소 0x1AF858에서 읽는 동안 단지 표준 액세스 위반이 발생하고 ecx와는 아무런 관련이 없기 때문입니다. 그러나 어쨌든 오류의 코드 및/또는 컨텍스트를 게시하십시오. – user786653

답변

3

당신은 실행 파일로 바이트 배열을 표시하거나 (다음 코드와 PAGE_EXECUTE_READ를 작성할 때 아마 PAGE_READWRITE) 올바른 flags 사용 VirtualAlloc으로 할당 할 VirtualProtect/VirtualProtectEx를 사용해야합니다. 아마 페이지 단위로 처리해야 할 것입니다.

+0

정말 고마워요 !!! 이제 작동합니다. 내가 사용하고있는 코드 : VirtualProtect (ptr, 크기, PAGE_EXECUTE_READWRITE, & flOldProtect) – user667967

관련 문제