How the assembler instruction could not read the memory on which it is placed

Using some software in Windows XP that runs as a Windows service and reboots from the login screen, I see a notorious error message

The instruction in "00x ..." refers to the memory in "00x ...". The memory could not be read.

I reported the problem to the developers, but after seeing the message again, I noticed that the addresses are the same. So,

The instruction on "00xdf3251" refers to the memory in "00xdf3251". The memory could not be read.

Whether this is an error in the program or not, but what is the state of the memory / access rights or something else that prevents the instruction from reading the memory that it allocates. Is this something specific to services?

+3
source share
2 answers

I would suggest that there was an attempt to execute the command at 0xdf3251, and this place was not copied using a readable and executable memory page (perhaps not completely displayed).

If this is the case, an exception (a page error actually) occurs from this instruction, and the exception handler has its address on the stack (a place to return to if the exception can be somehow resolved and the failure command is reloaded when the handler returns). And this is the first address you see.

The register CR2that the page error handler reads, which is the second address you see, also has the same address, because it must contain the address of an inaccessible memory location, regardless of whether the page error was caused by:

  • ( )
  • ( )
  • ( )
  • ( )

, ( - ).

.

, , , ( ) , . CPU ( , : jmp, call, ret). .

+2

. . , , . , , , . , , .

, . . , , . , . .

+1

All Articles