How can I JMP to a specific address in C?
I want to use
goto 0x10080000
This is not working, is there other way I can change the address of Program Counter??
You can cast the address to a function pointer and then jump into:
((void (*)(void))0x10008000)();
To make it a bit more clear:
typedef void (*func_t)(void);
...
((func_t)0x10008000)();
But this is a function, the compiler will emit a branch instruction that expect to return (then is up to you to make your function return or not). Also notice that the compiler will produce a code that expect to find a C function at the given address, about how the function arguments are given and returned.
If you need to emit a branch instruction without return you need to use inline assembly.
In GCC you can use computed goto. I didn't try it myself, but it should work like this:
void *address = 0x10080000;
...
goto *address;
Inline assembly instruction should work too:
asm("jump 0x10080000");
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With