我認爲這是一個簡單的問題,但我找不到任何東西。 如果我寫GCC內聯ASM保證
void bar()
{
{
void *rax = 0/* ...*/, *rbx = 0/* ... */;
asm volatile ("movq %0, %%rax; movq %1, %%rbx;" : : "m"(rax), "m"(rbx));
goto foo;
}
{
foo:
void* rax, *rbx;
asm volatile ("movq %%rax, %0; movq %%rbx, %1;" : "=m"(rax), "=m"(rbx));
// LOTS OF CODE
}
}
是它保證我可以運行之前在所述第二塊中的任何其他代碼讀取操作RAX/RBX的值?
看起來像一個XY問題 - 你真的想解決什麼? –
我正在爲C++編寫一個函數鉤子庫。我想使用未被ABI使用的寄存器來將用戶數據指針傳遞給鉤子函數。 – Ethon
那你爲什麼不寫一個調用實際函數的彙編封裝器呢?這是解決這個問題的傳統方法。 –