View Single Post
Old 17-01-2010, 19:25   #2
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Quote:
Originariamente inviato da Teo@Unix Guarda i messaggi
Ciao.
Sapete indicarmi un metodo per risalire alla dimensione in byte di una certa istruzione assembly. [/code]
La tabella degli opcode dell'ISA x86.
[code]Ad esempio, quanti byte necessitano le istruzioni:

Codice:
movl $0x0, 0xc(%esi)  // 7 bytes?
che dovrebbero essere diverse da: ( la prima è più dispendiosa )
Codice:
movl $0x0, %eax // 5 bytes ?
A naso direi che le dimensioni sono corrette.
Quote:
Mi risulta che la dimensione cambi secondo l'OS e CPU. è corretto?
No, sono sempre le stesse per la stessa ISA.
Quote:
Potete indicarmi come fare?
Oppure lo si può fare solo post compilazione con un debugger?
Puoi farlo a manina, ma è un casino da consultare l'opcode table.

Meglio utilizzare un assemblatore (che può generare un listato del sorgente originale a cui ha aggiunto i byte delle istruzioni) o un debugger.
Quote:
Il punto è che ho inserito dentro un programma C del codice asm con istruzioni tipo jmp indirizzo relativo .... e mi dà l'errore:
"Error: too many memory references for `jmp'", mi spiego? Credo di aver sbagliato a dargli l'indirizzo relativo.
Grazie.
Questo è molto strano, perché lo "sbrogliamento" degli offset è a carico dell'assemblatore.

Poi quel messaggio d'errore è la prima volta che lo leggo.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso