![](/img/trans.png)
[英]Passing array as a parameter to an external ASM (Assembly) x86 and accessing it
[英]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.