Die Assembly 'call' vs 'jmp'

Ich habe gesagt, um zu versuchen und verwenden Sie 'jmp eher als 'Anruf', sondern 'jmp' ist nicht gefällt mir .. wenn ich springen, es nicht mehr zurück (so dass es nie beendet und nicht glückliche Tage ), aber ruft zurück und beendet als normal.

Ich bin glücklich mit 'call', aber gibt es eigentlich einen Grund, ich sollte versuchen und zu überwinden, 'jmp' ?

Diesem einfachen code, der zeigt nur, ob, wenn ich jmp es kehrt nie zurück und beendet sich.

_start:

    jmp _Print
    jmp _Exit

ret


_Exit:

    ; normal exit 

ret


_Print

    ; print something

ret

auch .. bei mir läuft das alles in einem Linux-terminal, wenn das etwas ändert.

  • Dies ist mehrdeutig, und sehr unklar. JMP nicht in den stack (durch drücken der return-Wert), so ist, wenn man einen ret eine gefälschte Absenderadresse bekommt knallte aus dem Stapel entfernt werden und der code springt zu ihm. Sie fälschen eine call mit einem jmp aber vor zu tun, jmp, müssen Sie drücken Sie die return-Adresse auf den stack selbst. Was assembler ist und was OS sind Sie targeting? 16-oder 32-bit?
  • Ich denke, deine Frage könnte eine Antwort haben, ähnlich zu diesem: stackoverflow.com/a/28133370/3857942 .
  • Es gibt keinen Grund, der mir einfällt (in diesem Fall) zu verwenden JMP statt, außer zu getan werden in der Schule zu lehren, wie Sie eine CALL und RET Funktion zusammen durch die Simulation der CALL mit JMP. Es wird auch lernen Sie etwas über den stack
  • Einige der Antworten in diesem thread nützlich sein könnten. stackoverflow.com/questions/41205054/...
InformationsquelleAutor user3502489 | 2015-09-26
Schreibe einen Kommentar