|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
[assembly] Dimensione istruzioni
Ciao.
Sapete indicarmi un metodo per risalire alla dimensione in byte di una certa istruzione assembly. Ad esempio, quanti byte necessitano le istruzioni: Codice:
movl $0x0, 0xc(%esi) // 7 bytes? Codice:
movl $0x0, %eax // 5 bytes ? Oppure lo si può fare solo post compilazione con un debugger? 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. Ultima modifica di Teo@Unix : 17-01-2010 alle 17:43. |
|
|
|
|
|
#2 | ||||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quote:
Quote:
Meglio utilizzare un assemblatore (che può generare un listato del sorgente originale a cui ha aggiunto i byte delle istruzioni) o un debugger. Quote:
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 |
||||
|
|
|
|
|
#3 | ||
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
grazie per la risp.
Quote:
Quote:
Codice:
0x08048269 <main+25>: mov 0x18(%esp),%eax 0x0804826d <main+29>: movl $0x0,0x8(%esp) Codice:
shellcodeasm.c: Assembler messages: shellcodeasm.c:43: Error: junk `popl %esimovl %esi' after expression shellcodeasm.c:43: Error: junk `(%esi)movb $0x0' after expression shellcodeasm.c:43: Error: too many memory references for `jmp' Codice:
42 void main() {
43 __asm__(
44 "jmp 0x2a"
45 "popl %esi"
......
|
||
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Mi sa che devi istruire il compilatore ad usare la sintassi Intel e non quella AT&T.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: May 2008
Messaggi: 533
|
■
Ultima modifica di rеpne scasb : 18-06-2012 alle 16:50. |
|
|
|
|
|
#6 | ||
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
Quote:
però più che altro mi interessa capire perchè ho dei problemi con la compilazione... per la dimensione me la cavo comunque con gdb. Quote:
|
||
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Si' che puoi, ma quella sintassi e' la Intel.
Edit: No. Avevo letto male. Prova a mettere le istruzioni Intel e compilare, magari e' proprio il contrario.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: May 2008
Messaggi: 533
|
■
Ultima modifica di rеpne scasb : 18-06-2012 alle 16:50. |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
|
|
|
|
|
|
#10 | |||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Ma anche se prendi x86 come architettura, x86-64 (l'evoluzione a 64 bit) presenta già delle (succose) modifiche. Quote:
Quote:
In ogni caso non penso che dovresti occuparti tu del calcolo della dimensione delle istruzioni e degli offset per i salti. Dovresti poter dichiarare delle etichette per i salti, e lasciare all'assemblatore il compito di generare le istruzioni di salto in maniera opportuna. Altrimenti finisce come quando si lavorava in linguaggio macchina, e nel 2010 mi sembra un tantino esagerato.
__________________
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 |
|||
|
|
|
|
|
#11 | ||
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
Quote:
Quote:
Tutto questo era per capire bene come funziona tutta la faccenda a livello piu basso possibile, vedo che si possono fare cose particolari quando si vanno a ritoccare le istruzioni. Cose che, naturalmente, a livello piu alto non ci si immagina di poter fare. Per quanto riguarda il problema non ho ancora capito, per ora ho scritto tutto con sintassi intel, che è sicuramente piu pulita. Ed è ok. |
||
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
tanto per farvi partecipe, guardate alla fine come doveva essere la inline con AT&T:
Codice:
void main()
{
__asm__ (
"jmp 0x2a\n\t"
"popl %esi\n\t"
"movb $0x0, 0x7(%esi)\n\t"
[....]
);
}
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
E immagino che fosse tutto ben documentato.
__________________
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 |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:42.




















