Consider a process with the address map: 0x1000 - 0x2000 /bin/ls 0xa000 - 0xb000 /usr/lib/libc.so 0xf000 - 0xffff [stack] (ok its a little simple :-) and the core command: $ fcore -segments=stack then, when examining the program there are two possible errors: - the address is invalid because it doesn't fall within any of the above valid addresses; e.g., print *(void*)0 - the address's value is unavailable because it wasn't written to the core file; e.g., print environ (which would be in the heap) the two cases should be differentiated with differing error messages.