View Full Version : [ASSEMBLY] Riconoscere variabili
v1sc3rr4k
10-09-2012, 19:03
Salve a tutti,
ho dei sorgenti asm e ho bisogno di identificare le variabili, io da ignorante in materia pensavo le uniche variabili fossero i registri. In realtà approfondendo ho capito che ci sono diversi modi per maneggiare variabili con l'x86. Volevo chiedere a voi qualche dritta, io devo controllare i movimenti anomali delle variabili e un'idea ce l'ho. Il problema è che prima di farlo devo individuarle nei files *.asm!
Grazie a tutti :)
pabloski
10-09-2012, 20:19
No aspè, chiariamo. Le variabili per il processore non esistono. Lui vede solo locazioni di memoria.
Esiste però un modo di definire le variabili in assembly. Ma questo vale quando scrivi tu un programm assembly. Sono quelle cose definite con db, dw, ecc...
Se invece, come sospetto di aver capito, hai in mano dei file disassemblati da un binario, allora non ci sarà nulla nei sorgenti che sintatticamente rasenterà il concetto di variabile.
Vedrai solo dei dati che vengono spostati avanti e indietro in memoria, sommati, divisi, ecc....
Le uniche variabili "visibili" sono quelle locali, perchè vengono memorizzate nello stack frame corrente.
I registri invece non sono variabili, almeno non nel senso classico del termine. Contengono valori, li puoi usare per fare operazioni, leggere/scrivere valori, ma non sono variabili.
v1sc3rr4k
10-09-2012, 20:32
Grazie della risposta, seguendo i tuoi consigli ho riletto il codice notando questo:
db 002Eh
db 0081h
xorpatch db 0007h
encryptvalue dw 0000h
Ora il problema è che le prime due variabili non hanno nome! Come è possibile?
pabloski
10-09-2012, 21:29
Il motivo è legato al fatto che in linguaggio macchina le variabili ( non locali ) corrispondono a locazioni di memoria. Il nome è una semplice etichetta che serve a facilitare la vita al programmare e gli permette di riferirsi ad una certa locazione di memoria usando un nome facile da ricordare.
Per esempio, le prime due istruzioni riservano 16 e 16 bit in memoria. Quei valori li troverai effettivamente in memoria, ma nel codice assembly non potrai riferirti a quelle locazioni di memoria usando un nome simbolico facile da ricordare.
Dal punto di vista della macchina quelle 4 sono uguali, dal punto di vista del programmatore no.
v1sc3rr4k
11-09-2012, 11:35
Giusto dimenticavo questo particolare. Grazie mille dei chiarimenti :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.