In teoria... ma scrivi giustamente che non conviene. In pratica, puntatori:
- o puntano nella sezione .data o data?,
- o vengono da HeapAlloc ecc.,
- o sono calcolati in base ad un puntatore iniziale ed un indice, tipo mov eax, [edi+8*ecx]
In un'applicazione che non ha dei gravi bug, un puntatore può essere valido o zero. Non c'è una terza categoria...
Se hai un'applicazione media, e un sospetto che c'è un bug ben nascosto:
RichMasm ha l'opzione OPT_Debug 1:
include \masm32\include\masm32rt.inc ; OPT_Debug 1
.code
start:
mov edi, alloc(20) ; un puntatore valido
mov ecx, 42 ; guai...
rep stosb
inkey "ok...?"
exit
end start
Se premi un tasto vedendo "ok...?", appare un messaggio d'errore molto preciso:
## HEAP[NewMasm32.exe]:
## HEAP: Free Heap block 2861a0 modified at 2861d0 after it was freed