Goto a specific Address in C

前端 未结 3 1695
猫巷女王i
猫巷女王i 2021-01-18 12:45

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 a

相关标签:
3条回答
  • 2021-01-18 13:32

    Inline assembly instruction should work too:

    asm("jump 0x10080000");

    0 讨论(0)
  • 2021-01-18 13:38

    In GCC you can use computed goto. I didn't try it myself, but it should work like this:

    void *address = 0x10080000;
    ...
    goto *address;
    
    0 讨论(0)
  • 2021-01-18 13:39

    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.

    0 讨论(0)
提交回复
热议问题