Quote:
Originariamente inviato da Teo@Unix
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.