access violation exception dump debug

Hello everyone,

I am debugging an access violation exception dump (code xxxxxxxx access violation for memory address, exception code 0x00000005). It is 32-bit x86 code release version. I have used the command dd to examine the memory address (not code address) which reports access violaton. The content of the address is displayed as ??? in debugger.

I double checked for the memory, it does not belong to any stack (using k on each thread) memory address space, does not belong to any binary code (using lm command to verify).

My question is, for memory address which reports access violation and which content is ???,

  1. is it the memory address not allocated (or reserved) in current process virtual memory space?
  2. or the memory address deleted? I have made some test that for the memory deleted on heap, its content will be marked with 0xfe, not ?. But I am not sure whether when the heap memory is recycled by OS memory mamagement system, it will be remarked as ???
  3. Or something else possible?

thanks in advance,
George

Either the memory isn’t present in the dump and can’t be found in any binary that can be downloaded from the symbol server (if you are debugging a minimal minidump), or it’s just plain not valid (i.e. a PAGE_NOACCESS page). This can also happen in kernel mode if the requested address was paged out.

Depending on whether the dump file was written with enough information, you may be able to use !address to map out the address space. Most minidumps won’t have enough data to do this and the command will fail. Full minidumps (e.g. generated by ``.dump /ma’') should have enough data to run !address, as I recall.

  • S

-----Original Message-----
From: xxxxx@lists.osr.com [mailto:xxxxx@lists.osr.com] On Behalf Of Lin George
Sent: Saturday, November 22, 2008 11:28 PM
To: Kernel Debugging Interest List
Subject: [windbg] access violation exception dump debug

Hello everyone,

I am debugging an access violation exception dump (code xxxxxxxx access violation for memory address, exception code 0x00000005). It is 32-bit x86 code release version. I have used the command dd to examine the memory address (not code address) which reports access violaton. The content of the address is displayed as ??? in debugger.

I double checked for the memory, it does not belong to any stack (using k on each thread) memory address space, does not belong to any binary code (using lm command to verify).

My question is, for memory address which reports access violation and which content is ???,

  1. is it the memory address not allocated (or reserved) in current process virtual memory space?
  2. or the memory address deleted? I have made some test that for the memory deleted on heap, its content will be marked with 0xfe, not ?. But I am not sure whether when the heap memory is recycled by OS memory mamagement system, it will be remarked as ???
  3. Or something else possible?

thanks in advance,
George


You are currently subscribed to windbg as: xxxxx@valhallalegends.com
To unsubscribe send a blank email to xxxxx@lists.osr.com

Hi S,

I am using a full minidump and I have verified all symbols for binaries are loaded, either my own private symbol for the code I wrote or the public symbol of OS.

In this situation, I am confused about two things,

I think this situation you mentioned – “Either the memory isn’t present in the dump and can’t be found in any binary that can be downloaded from the symbol server (if you are debugging a minimal minidump)” is not applied in my situation? Correct?

“it’s just plain not valid (i.e. a PAGE_NOACCESS page)” I donot quite understand this. What means plain not valid? Could you provide more description please? Why PAGE_NOACCESS? Not valid address or protected by OS kernel do you mean?

“This can also happen in kernel mode if the requested address was paged out.” – I am debugging a user mode x86 application, the code which causes access violation belongs to my own code (when I access some member variable for a class instance). So, in this situation, is it still possible that ??? output is because of “in kernel mode if the requested address was paged out”?

“!address to map out the address space” – confused about your words. map out you mean page out? I think !address command in my experience just check memory address/page property, not doing anything like page out. :slight_smile:

regards,
George

----- Original Message ----
From: Skywing
To: Kernel Debugging Interest List
Sent: Sunday, November 23, 2008 1:05:42 PM
Subject: RE: [windbg] access violation exception dump debug

Either the memory isn’t present in the dump and can’t be found in any binary that can be downloaded from the symbol server (if you are debugging a minimal minidump), or it’s just plain not valid (i.e. a PAGE_NOACCESS page).? This can also happen in kernel mode if the requested address was paged out.

Depending on whether the dump file was written with enough information, you may be able to use !address to map out the address space.? Most minidumps won’t have enough data to do this and the command will fail.? Full minidumps (e.g. generated by ``.dump /ma’') should have enough data to run !address, as I recall.

- S

-----Original Message-----
From: xxxxx@lists.osr.com [mailto:xxxxx@lists.osr.com] On Behalf Of Lin George
Sent: Saturday, November 22, 2008 11:28 PM
To: Kernel Debugging Interest List
Subject: [windbg] access violation exception dump debug

Hello everyone,

I am debugging an access violation exception dump (code xxxxxxxx access violation for memory address, exception code 0x00000005). It is 32-bit x86 code release version. I have used the command dd to examine the memory address (not code address) which reports access violaton. The content of the address is displayed as ??? in debugger.

I double checked for the memory, it does not belong to any stack (using k on each thread) memory address space, does not belong to any binary code (using lm command to verify).

My question is, for memory address which reports access violation and which content is ???,

1. is it the memory address not allocated (or reserved) in current process virtual memory space?
2. or the memory address deleted? I have made some test that for the memory deleted on heap, its content will be marked with 0xfe, not ?. But I am not sure whether when the heap memory is recycled by OS memory mamagement system, it will be remarked as ???
3. Or something else possible?

thanks in advance,
George

? ? ?


You are currently subscribed to windbg as: xxxxx@valhallalegends.com
To unsubscribe send a blank email to xxxxx@lists.osr.com


You are currently subscribed to windbg as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@lists.osr.com

Forget to send the result of !address. I am not sure whether such information indicates I access some memory which is deleted or some else which is not valid address at all?

0:001> !address 0x00d4cff0
??? 00d0d000 : 00d0d000 - 00040000
??? Type??? 00000000
??? Protect? 00000001 PAGE_NOACCESS
??? State??? 00010000 MEM_FREE
??? Usage??? RegionUsageFree

regards,
George

----- Original Message ----
From: Lin George
To: xxxxx@valhallalegends.com
Cc: Kernel Debugging Interest List
Sent: Sunday, November 23, 2008 1:29:20 PM
Subject: Re: [windbg] access violation exception dump debug

Hi S,

I am using a full minidump and I have verified all symbols for binaries are loaded, either my own private symbol for the code I wrote or the public symbol of OS.

In this situation, I am confused about two things,

1.

I think this situation you mentioned – “Either the memory isn’t present in the dump and can’t be found in any binary that can be downloaded from the symbol server (if you are debugging a minimal minidump)” is not applied in my situation? Correct?

2.

“it’s just plain not valid (i.e. a PAGE_NOACCESS page)” I donot quite understand this. What means plain not valid? Could you provide more description please? Why PAGE_NOACCESS? Not valid address or protected by OS kernel do you mean?

3.

“This can also happen in kernel mode if the requested address was paged out.” – I am debugging a user mode x86 application, the code which causes access violation belongs to my own code (when I access some member variable for a class instance). So, in this situation, is it still possible that ??? output is because of “in kernel mode if the requested address was paged out”?

4.

“!address to map out the address space” – confused about your words. map out you mean page out? I think !address command in my experience just check memory address/page property, not doing anything like page out. :slight_smile:

regards,
George

----- Original Message ----
From: Skywing
To: Kernel Debugging Interest List
Sent: Sunday, November 23, 2008 1:05:42 PM
Subject: RE: [windbg] access violation exception dump debug

Either the memory isn’t present in the dump and can’t be found in any binary that can be downloaded from the symbol server (if you are debugging a minimal minidump), or it’s just plain not valid (i.e. a PAGE_NOACCESS page).? This can also happen in kernel mode if the requested address was paged out.

Depending on whether the dump file was written with enough information, you may be able to use !address to map out the address space.? Most minidumps won’t have enough data to do this and the command will fail.? Full minidumps (e.g. generated by ``.dump /ma’') should have enough data to run !address, as I recall.

- S

-----Original Message-----
From: xxxxx@lists.osr.com [mailto:xxxxx@lists.osr.com] On Behalf Of Lin George
Sent: Saturday, November 22, 2008 11:28 PM
To: Kernel Debugging Interest List
Subject: [windbg] access violation exception dump debug

Hello everyone,

I am debugging an access violation exception dump (code xxxxxxxx access violation for memory address, exception code 0x00000005). It is 32-bit x86 code release version. I have used the command dd to examine the memory address (not code address) which reports access violaton. The content of the address is displayed as ??? in debugger.

I double checked for the memory, it does not belong to any stack (using k on each thread) memory address space, does not belong to any binary code (using lm command to verify).

My question is, for memory address which reports access violation and which content is ???,

1. is it the memory address not allocated (or reserved) in current process virtual memory space?
2. or the memory address deleted? I have made some test that for the memory deleted on heap, its content will be marked with 0xfe, not ?. But I am not sure whether when the heap memory is recycled by OS memory mamagement system, it will be remarked as ???
3. Or something else possible?

thanks in advance,
George

? ? ?


You are currently subscribed to windbg as: xxxxx@valhallalegends.com
To unsubscribe send a blank email to xxxxx@lists.osr.com


You are currently subscribed to windbg as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@lists.osr.com

Lin George wrote:

Forget to send the result of !address. I am not sure whether such information indicates I access some memory which is deleted or some else which is not valid address at all?

0:001> !address 0x00d4cff0
00d0d000 : 00d0d000 - 00040000
Type 00000000
Protect 00000001 PAGE_NOACCESS
State 00010000 MEM_FREE
Usage RegionUsageFree

The ‘???’ means that debugger could not read that memory.
PAGE_NOACCESS explains why.

–PA

Hi PA,

I have tried my best to find out what means “PAGE_NOACCESS” from Windbg document. But can not find out. Any description from you or you could recommend me where can I find what PAGE_NOACCESS exactly means? Currently, I am not sure whether no access means, the memory is deleted, or protected by kernel or invalid address which contains nothing at the address at all. :slight_smile:

I want to figure out what is the exact meaning of the PAGE_NOACCESS?

regards,
George

----- Original Message ----
From: Pavel A.
To: Kernel Debugging Interest List
Sent: Sunday, November 23, 2008 6:32:43 PM
Subject: Re:[windbg] access violation exception dump debug

Lin George wrote:
> Forget to send the result of !address. I am not sure whether such information indicates I access some memory which is deleted or some else which is not valid address at all?
>
> 0:001> !address 0x00d4cff0
>? ? 00d0d000 : 00d0d000 - 00040000
>? ? ? ? ? ? ? ? ? ? Type? ? 00000000? ? ? ? ? ? ? ? ? ? Protect? 00000001 PAGE_NOACCESS
>? ? ? ? ? ? ? ? ? ? State? ? 00010000 MEM_FREE
>? ? ? ? ? ? ? ? ? ? Usage? ? RegionUsageFree
>

The ‘???’ means that debugger could not read that memory. PAGE_NOACCESS explains why.

–PA


You are currently subscribed to windbg as: xxxxx@yahoo.com
To unsubscribe send a blank email to xxxxx@lists.osr.com

Lin George wrote:

Hi PA,

I have tried my best to find out what means “PAGE_NOACCESS” from Windbg document. But can not find out. Any description from you or you could recommend me where can I find what PAGE_NOACCESS exactly means? Currently, I am not sure whether no access means, the memory is deleted, or protected by kernel or invalid address which contains nothing at the address at all. :slight_smile:
I want to figure out what is the exact meaning of the PAGE_NOACCESS?

All we know that access flags of that page are set to “PAGE_NOACCESS”.
Maybe this page is not mapped anywhere at all, or maybe OS sets
PAGE_NOACCESS to prevent reading memory freed by others…
Why this matters? You found a bug, just fix it.

regards,
George

----- Original Message ----
From: Pavel A.
> To: Kernel Debugging Interest List
> Sent: Sunday, November 23, 2008 6:32:43 PM
> Subject: Re:[windbg] access violation exception dump debug
>
> Lin George wrote:
>> Forget to send the result of !address. I am not sure whether such information indicates I access some memory which is deleted or some else which is not valid address at all?
>>
>> 0:001> !address 0x00d4cff0
>> 00d0d000 : 00d0d000 - 00040000
>> Type 00000000 Protect 00000001 PAGE_NOACCESS
>> State 00010000 MEM_FREE
>> Usage RegionUsageFree
>>
>
> The ‘???’ means that debugger could not read that memory. PAGE_NOACCESS explains why.
>
> --PA

Lin George wrote:

I want to figure out what is the exact meaning of the PAGE_NOACCESS?

Did you try Google before posting here? WinDbg doesn’t invent all these
symbol names. They are all names from the SDK or DDK.


Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.