简体   繁体   中英

Defining a variable/label to use with inline assembly JMP instruction

I a have function with inline assembly that has the following definition:

void __declspec(naked) func()
{
    __asm 
    {
        //...
        JMP [address]
        //...
    }
}

This address variable is known only at run time, at main I have:

int main()
{
    //...
    DWORD address = getAddress();
    func();
    //...
}

As like that, the code will not compile with the following error message:

error C2094: label 'address' was undefined

  1. How can I work around this problem, knowing that I cannot pass address as a parameter to the func() function?

  2. Could I define address in a namespace? Would it be good practice? Can namespaces be used to promote the scope of a variable (using this variable at diferent functions/scopes)?

you are in C++, the destructors must be called when you leave blocks having instances of classes in the stack, this will not be the case with your JMP, and I do not speak about the value of the stack pointer/frame

C++ have exceptions, use them, for instance give in argument the address of a function without argument to call in your assembly portion, and that function throw the exception you want, and place a try-catch at the destination you want to go

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM