On Thursday, 25 January 2018 at 02:41:53 UTC, Walter Bright wrote:


Ok, but are these devices with 0 being a valid address?

It seems weird to me that any sane modern CPU design that can access megabytes of memory would have 0 be a valid address.

Yes, 0 is a valid address and typically points to ROM (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0497a/CHDBIJJE.html).

"The initial stack pointer and the address of the reset handler must be located at 0x0 and 0x4 respectively." (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0497a/CHDBIJJE.html)

So you read address 0, dereference it, and you're at the bottom of the stack.

Some microcontrollers have an MPU to mitigate this. You can read one technique here: http://nuttx.org/doku.php?id=wiki:howtos:stm32-null-pointer But the MPU is an optional component, and many microcontrollers in the ARM Cortex-M family do not have one.

Mike

Reply via email to