Mi è stato detto di provare a utilizzare 'jmp anziché' call ', ma' jmp 'non mi piace .. quando salto non ritorna (quindi non esce mai e giorni non felici), ma chiamando i ritorni e le uscite normalmente.Assembly 'call' vs 'jmp'
Sono felice di usare "chiamata", ma c'è davvero una ragione per cui dovrei provare a superare "jmp"?
questo semplice codice mostra solo se quando I 'jmp' non ritorna mai ed esce.
Grazie in anticipo per qualsiasi aiuto.
_start:
jmp _Print
jmp _Exit
ret
_Exit:
; normal exit
ret
_Print
; print something
ret
anche .. Io corro tutto questo in un terminale Linux se questo cambia nulla
Questa è ambigua, e molto poco chiaro. JMP non imposta lo stack (premendo il valore di ritorno) così quando si esegue un 'ret', un indirizzo di ritorno fasullo viene estratto dallo stack e il codice salta su di esso. Puoi simulare un 'call' con un' jmp', ma prima di fare jmp devi inserire tu stesso l'indirizzo di ritorno nello stack. Quale assemblatore e quale sistema operativo stai prendendo di mira? 16 o 32 bit? –
Penso che la tua domanda potrebbe avere una risposta simile a questa: http://stackoverflow.com/a/28133370/3857942. –
Non c'è motivo per cui io possa pensare (in questo caso) di usare 'JMP', eccetto che a scuola per insegnare come una funzione' CALL' e 'RET' insieme simulando' CALL' con 'JMP '. Ti insegnerà anche qualcosa sullo stack –