Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    111

    Assembler variabili e direttive

    Ragazzi, allora ho questo problema; ( dopo il mio post precedente, a mio avviso ingiustamente chiuso) ho trovato da internet un bel pdf che illustrava dettagliatamente le variabili in assembler, praticamente si possono definire variabili usando questi comandi:


    [nome] direttiva valore
    • direttive: BYTE (DB), WORD (DW), DWORD (DD), QWORD (DQ)
    • valore può essere:
    • un valore numerico
    • una stringa tra apici
    • il carattere ?
    • il costrutto num DUP (val) che replica num volte il valore val.
    Il [nome] può essere omesso


    Ora però non mi è chiaro, quando ometto il nome della variabile, io cosa diamine vado ad inizzializzare?
    Guardiamo questo frammento di codice:
    start:
    codice:
    ENCRYPT:
    patchstart:
            mov     bx, offset endencrypt
            mov     cx, (heap-endencrypt)/2+1
    encrypt_loop:
            db      002Eh                   ; cs:
            db      0081h                   ; add word ptr [bx], xxxx
    xorpatch        db      0007h
    encryptvalue    dw      0000h
    nell'encrypt_loop praticamente definisco una variabile, ma questa variabile non ha nome, nel commento vedo che il valore che assegno alla variabile va a finire in CS, ma non capisco il perchè. Qualcuno di voi sa chiarirmi questa cosa? Grazie mille.
    Si vis Pacem Para Bellum

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466

    Re: Assembler variabili e direttive

    Originariamente inviato da Lord112
    ( dopo il mio post precedente, a mio avviso ingiustamente chiuso)
    Non sono d'accordo ... prima di tutto, la tu domanda non era affatto chiara e, soprattutto, perché parlavi di un virus ...

    ho trovato da internet un bel pdf
    Vedi che bisogna comunque documentarsi prima?

    quando ometto il nome della variabile, io cosa diamine vado ad inizzializzare?
    Inizializzare ... una sola z all'inizio ...

    Inizializzi aree di memoria.

    Guardiamo questo frammento di codice: ...
    start:
    codice:
    ENCRYPT:
    patchstart:
            mov     bx, offset endencrypt
            mov     cx, (heap-endencrypt)/2+1
    encrypt_loop:
            db      002Eh                   ; cs:
            db      0081h                   ; add word ptr [bx], xxxx
    xorpatch        db      0007h
    encryptvalue    dw      0000h
    nell'encrypt_loop praticamente definisco una variabile
    Di quale variabile parli?

    va a finire in CS
    Tu conosci le microistruzioni x86? Dove hai letto che qualcosa finisce in CS in quel codice? Sai cosa sia CS?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,302

    Re: Assembler variabili e direttive

    Originariamente inviato da Lord112
    Guardiamo questo frammento di codice
    Il codice l'hai scritto tu o l'hai preso da qualche parte.
    E qual è lo scopo del programma di cui stiamo parlando?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    111
    Allora, innanzitutto (rivolto ad oregon) so che inizializzazione si scrive con una zeta, è stato un semplice errore, nella fretta di mettere il post online e che tu da gentiluomo avresti potuto pure non mettere in risalto,non stiamo facendo un tema di italiano; per quanto riguarda il vecchio post, io parlavo di virus perchè lo studio che sto conducendo è sui virus metamorfici , quindi volevo specificare bene di cosa stavo parlando, sperando che qualcuno di voi avesse già affrontato il mio stesso problema, ovvero individuare le variabili all'intenro di un codice assembly per generare un data flow analyse (sai a cosa mi riferisco mi auguro).
    Per la cronaca, ho studiato per motivi didattici l'assembly del mips, che è sostanzialmente diverso rispetto a quello che mi trovo a dover analizzare adesso.

    Nel encrypt_loop con il comando DB definisco un'area di memoria ( che è DEFINITA VARIABILE dal manuale stesso dell'assembly 8086 ) atta a contenere byte .
    Siccome come già avevo detto, tale definizione di variabile era senza nome, come si vede dal codice, avevo pensato che il commento ( ;cs) fosse riferito a qualche registro del processore, ecco tutto.


    Per alka il codice qui riportato è un frammento di un codice generato da tool di cui ometto il nome per evitare che qualche sprovveduto si metta a fare danni in rete. E' un codice assembly ovviamente come vedi scritto per 8086; come già detto sopra e nel post precedente, il mio compito è fare il DFA , per poter valutare la bontà del sorgente analizzato.

    [Piccolo off-topic doveroso da parte mia]
    Credo che sia ruolo di un buon forum fornire supporto alla conoscenza ed indirizzare chi sa poco circa un argomento, verso il materiale più giusto a risolvere e colmare quelle che sono le sue carenze. Inoltre dovrebbe essere un punto di ritrovo per discutere su argomenti e passioni comuni, non dovrebbe essere un luogo dove il tipo X mostra di saper fare più del tipo Y , perchè questo è il grosso problema dell'italiano, non condividere, ma cercare di surclassare chi chiede aiuto.
    Si vis Pacem Para Bellum

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da Lord112
    ... da gentiluomo avresti potuto pure non mettere in risalto ...
    Non te la sarai presa se non sono un gentiluomo ...

    non stiamo facendo un tema di italiano
    Questo non ha assolutamente importanza.

    per quanto riguarda il vecchio post, io parlavo di virus perchè lo studio che sto conducendo è sui virus metamorfici
    Purtroppo l'argomento è molto "border line". Sono convinto che tu studi, ma nessuno mi dice che sia effettivamente così. Dato che è indimostrabile, si preferisce non affrontare certi argomenti, almeno così è sempre stato in questo forum.

    un data flow analyse (sai a cosa mi riferisco mi auguto).
    Ma perché proprio del codice di un virus?

    Per la cronaca, ho studiato per motivi didattici l'assembly del mips
    E quindi hai visto già in quel caso che il nome della zona di memoria che contiene dei dati è opzionale.

    che è sostanzialmente diverso rispetto a quello che mi trovo a dover analizzare adesso.
    Non tanto diverso, alla fine.

    Nel encrypt_loop con il comando DB definisco un'area di memoria ( che è DEFINITA VARIABILE dal manuale stesso dell'assembly 8086 ) atta a contenere byte .
    Ti avevo già chiesto di preciso a quale area ti riferissi nel codice mostrato ...

    In ogni caso, un'area di memoria che contiene dati può non avere nomi. Ci sono tanti modi di accedere alla memoria e a volte i nomi non servono.

    Siccome come già avevo detto, tale definizione di variabile era senza nome, come si vede dal codice, avevo pensato che il commento ( ;cs) fosse riferito a qualche registro del processore, ecco tutto.
    CS è un registro del processore.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    111
    O finalmente una risposta che giudico buona, capisco perfettamente che l'argomento è al limite di quello che si può e di quello che non si può dire, il punto è che se uno vuole fare danni non certo si mette a fare il DFA di un codice assembler; questa operazione mi serve perchè appunto ho necessità di capire se il codice che sto analizzando è buono o malevolo ecco tutto.

    Parto dal codice sorgente di un virus perchè sono sicuro che è malevolo al 100% ; ma sarei potuto partire anche dal codice assembly del programma "ciao mondo".

    Dimmi, tu nel mio caso come procederesti? Come realizzeresti un dfa da un codice assembly qualsiasi (così evitiamo il border-line ) ???

    Grazie!
    Si vis Pacem Para Bellum

  7. #7
    Posso solo ipotizzare che le due dichiatrazioni, se fatte in quell' ordine e per prime nella stesura del codice, "vadano a finire" (cioè posso essere referenziate) con DS:0 e DS:2...puoi provare se ciò che dico è giusto debuggando il software e mappando la memoria nel registro DS del processore quando esegue il software

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    111
    Originariamente inviato da celtico94
    Posso solo ipotizzare che le due dichiatrazioni, se fatte in quell' ordine e per prime nella stesura del codice, "vadano a finire" (cioè posso essere referenziate) con DS:0 e DS:2...puoi provare se ciò che dico è giusto debuggando il software e mappando la memoria nel registro DS del processore quando esegue il software
    Wow non ci ho capito molto di quello che hai scritto, potresti spiegarti meglio? Grazie!
    Si vis Pacem Para Bellum

  9. #9
    Hai allocato due byte (db) senza specificarne il nome. ora tu hai il problema di "come faccio riferimento a quell'area di memoria"? la risposta è semplice. essendo assembly x86 ogni allocazione "va" nel DS, cioè il registro segmento dei dati. ora, se quelle due sono le prime dichiarazioni avute nel programma, facendo riferimento all'indirizzo DS:0 (registro segmento base + offeset 0) fai riferimento alla prima, mentre con DS:1 (registro segmento dati + offset 1) fai riferimento alla seconda...se non comprendi qualcosa che ho detto, dovresti tornare alla teoria sull' assembly e l'architettura dell' 8086.

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da celtico94
    ... "va" nel DS ...
    Non è detto che si faccia riferimento a DS. A parte la questione "modalità reale" a 16 o "protetta" a 32 bit, esistono i registri ES, FS, GS e addirittura CS.

    Anzi, è proprio quello che fa il "virus" di cui si parla in questo caso, dato che modifica "dinamicamente" il proprio codice modificando il valore dei microcodici contenuti in memoria in base al registro CS:
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.