0
compare PROTO, p1:DWORD, p2:DWORD
.code
compare proc p1:DWORD, p2:DWORD
mov eax, p1
mov edx, p2
mov eax, [eax] ;Getting an access violation here
mov edx, [edx] ; Would probably get one here too, why?
sub eax, edx
ret
compare endp
main PROC
LOCAL thesize:DWORD
mov thesize, 3
mov fill, 5
INVOKE compare, thesize, thesize
ret
main ENDP
이 코드가 작동하지 않는 이유는 궁금합니다. 그것을 작동시키는 또 다른 방법은 무엇입니까, 저는 레지스터를 가지고 놀면서 배열을 채울 때 비슷한 코드를 시도하고있었습니다 만,이 시점에서 고생했습니다.어셈블리의 레지스터 값에 액세스 할 때 액세스 기록 위반이 발생했습니다.
미리 감사드립니다.
레지스터 값에 액세스하는 것이 아니라 잘못된 메모리 주소에 액세스하려고합니다. [eax]는 eds를 통한 메모리 액세스입니다 : eax 정도. 그리고 귀하의 케이스에 eax 레지스터가 메모리의 잘못된 페이지를 가리키는 데이터 세그먼트 내에 잘못된 오프셋을 포함하고 있습니다. – AlexanderVX
@AlexanderVX 어떻게 메모리의 해당 위치에서 값을 수정합니까? 기본적으로, 나는 p1과 p2를 영구적으로 수정하고 싶지만 그 값을 변수로 직접 이동하지는 않습니다. – user2738003
올바른 주소가있을 때만 일부 주소의 값을 수정할 수 있습니다. 코드의 의도가 명확하지 않습니다. Gunner의 대답은 당신이 원하는 것에 더 가깝지만 나는 단순한 오류만을 보았습니다. – AlexanderVX