When using the winIDEA Memory window to view memory that should be
inaccessible, you may notice a discrepancy in the memory display between the
Virtual and IP memory areas. Specifically, the Virtual memory area
displays "00" values instead of the expected "??," while the
IP memory area correctly shows memory as "??." This also
extends to the use of winIDEA SDK readMemory(), where access
status indicates that all bytes are correctly read in the virtual memory
area.
The observed behavior is expected and can be explained as follows:
When you view memory in the Virtual memory area, winIDEA operates in a mode where the core is stopped, typically in a secure state. In this state, the core has the ability to access memory areas that may be restricted when the core is running in a non-secure state. Consequently, the Virtual memory area may display memory that would normally be inaccessible in a running, non-secure state, which is why you see "00" values.
In the IP memory area, you are viewing memory as it exists in the non-secure virtual state. When the core is running in a non-secure mode, it may not have access to certain memory regions, and this is correctly reflected in the IP memory area, which shows "??" to indicate inaccessible memory.
To achieve consistency between the Virtual and IP memory areas, you would need to have an application or code that switches the core to non-secure mode. In this case, both memory windows, Virtual and IP, would show the same memory contents as the core would be in a non-secure state, and the inaccessible memory regions would display as "??."