Springen eine bestimmte Adresse in C
Wie kann ich den JMP zu einer bestimmten Adresse in C?
Möchte ich
goto 0x10080000
Ist dies nicht funktioniert, gibt es andere Weise, die ich ändern kann, die Adresse der Programm Counter??
- Wenn Sie die Adresse kennen, können Sie immer sagen
asm("jmp 0x10080000")
...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie cast die Adresse einer Funktion, die Zeiger und springen Sie dann in:
Um es ein wenig klarer:
Aber dies ist eine Funktion, die den compiler veranlasst ein Sprungbefehl, der voraussichtlich zurückkehren werden (dann ist bis zu Ihnen, um Ihre Funktion zurück oder nicht).
Beachten Sie auch, dass der compiler erzeugt einen code, den erwarten eine C-Funktion an die angegebene Adresse, etwa wie die Funktion, die Argumente sind gegeben und zurückgegeben.
Wenn Sie abgeben müssen, um einen Sprungbefehl, ohne zurückzukehren, müssen Sie die Verwendung von inline-assembly.
In GCC, die Sie verwenden können berechnete goto. Ich habe nicht versucht, es selbst, aber es sollte funktionieren wie dieser:
Inline-assembly-Anweisung sollten auch funktionieren:
asm("jump 0x10080000");