Come sapere se un indirizzo specifico è su stack o heap usando il debugger immuntiy?

1

Ho un indirizzo (ad esempio 0x010f73fc) e devo sapere dove si trova questo indirizzo? è su stack o heap?

In un altro modo, come distinguere tra gli indirizzi che appartengono allo stack e gli indirizzi che appartengono all'heap?

    
posta Ahmed Taher 03.08.2013 - 18:36
fonte

3 risposte

1

Come regola generale, non puoi sapere solo dall'indirizzo. Ma con qualche contesto puoi farlo. Guarda il registro SP, per esempio. Lo stack e l'heap in genere crescono uno verso l'altro, quindi in un ambiente con poca memoria, gli indirizzi dovrebbero essere distanti.

    
risposta data 03.08.2013 - 21:38
fonte
1

Non puoi davvero saperlo perché ogni thread ha il proprio stack e gli stack per i thread sono allocato ... sullo heap.

Un dato sistema operativo avrà normalmente un'area riservata pre-allocata per lo stack del "thread principale", ma questo dipende dalla versione esatta del sistema operativo e potrebbe anche, concettualmente, essere spostato casualmente ad ogni esecuzione. Il tuo debugger, tuttavia, se collegato al processo, dovrebbe essere in grado di fornirti l'elenco dei thread attualmente in esecuzione e, per ognuno di essi, il loro attuale puntatore dello stack, fornendo indizi sul luogo in cui si trovano tutti questi stack.

    
risposta data 06.09.2013 - 20:05
fonte
0

Beh, puoi trovarlo sul tuo sistema in un momento particolare ma non puoi giudicare che in qualsiasi momento quell'indirizzo (anche sulla tua macchina) sarà in stack o heap.

Nei vecchi giorni prima di ASLR si poteva semplicemente aprire il programma in un debugger (come l'immunità) e vedere dove l'indirizzo appartiene, per quel particolare programma. Ora non è possibile nemmeno per lo stesso programma.

    
risposta data 07.08.2013 - 18:33
fonte

Leggi altre domande sui tag