簡體   English   中英

在 C++ 中將 integer 傳遞給 x86 ASM

[英]Passing integer to x86 ASM in C++

我正在嘗試在 C++ 中進行一些腳本掛鈎,並為此案例設置了一個簡單的測試 function。

   void __declspec(naked) testFunct()
{
    int myInt;
    myInt = 2000;
    __asm{
        mov eax, myInt
        jmp [jmp_back_address]
    }
}

當使用它傳入 integer 時,function 在被調用時失敗並且項目崩潰。 但是,當改用它時,沒有 integer 值,它成功通過。

   void __declspec(naked) testFunct()
{
    __asm{
        mov eax, 2000
        jmp [jmp_back_address]
    }
} 

怎樣才能順利通過integer?

匯編器不知道“myInt”是什么意思。 大多數編譯器都支持內聯匯編,並可以傳遞值。 例如,對於 GCC,您可以嘗試定義一個宏

#define MY_ASM_MACRO(myInt) ({ asm volatile("mov eax,%0\n\t \
          jmp [jmp_back_address]" : : "r"(myInt) : ); })

並像使用它一樣

void __declspec(naked) testFunct()
{
   int myInt;
   myInt = 2000;
   MY_ASM_MACRO(myInt)
}

針對我的情況,正確的解決方案是通過 ASM 簡單地在 ourFunct() 中執行所有操作,因為將 C++ 和 ASM 混合用於傳遞變量會產生錯誤的匯編代碼。 有效的 function 調用示例:

int CalculateTotalScore()
{
    return (int)*Game::current_speed_score;
}

DWORD jmpBackAddress;
void __declspec(naked) ourFunct()
{
    __asm{
        call CalculateTotalScore
        jmp [jmpBackAddress]
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM