在函数 A 调用函数 B 之后,B 中的代码是否可以丢弃所有寄存器(除了那些保存堆栈指针和 B 参数的寄存器)而不影响 A 本地的变量?因此,在函数 B 返回到函数 A 之后,函数 A 是否将其所有局部变量从堆栈中弹出(原因是在函数 B 执行时寄存器状态可能已更改)?
全局变量呢?函数 B 是否需要担心影响全局变量状态的任何寄存器操作?
(我问这个的主要原因是,我想尝试在运行时将机器代码作为函数B注入,方法是使用mprotect
使数组可执行,然后将数组指针转换为函数指针并调用它。我希望有上述问题找出 B 的游乐场的范围。)