我需要将一个指针推入eax寄存器,另一个指针推入ebx寄存器。我首先用以下方法解决了这个问题:
register int eax asm("eax");
register int ebx asm("ebx");
int main()
{
eax = ptr1;
ebx = ptr2;
}
这个方法非常有效。然而,当我将其添加到其他代码中时,我得到了一些奇怪的错误,关于gcc无法在代码中完全不相关的部分找到一个溢出寄存器类AREG。我进行了谷歌搜索,结果发现这实际上是gcc的一个bug。所以,我需要另一种方式来将两个指针推入eax和ebx寄存器中。有人有什么想法吗?
编辑:
由于人们一直在问我在尝试做什么,所以我想解释一下。
我需要更改eax和ebx用于我正在尝试在程序中运行的一些汇编代码。我需要通过eax和ebx寄存器提供指向参数的指针来执行此汇编代码。我通过将指向它的指针推入ebx中并调用ebx来执行汇编代码。当我将注册表内容本地调用而不是全局调用时,汇编代码会崩溃。如果我将其全局调用,则在随机函数结束时会出现奇怪的错误。当我删除该函数时,它会在另一个随机函数中抛出相同的错误。直到我用完所有函数,然后它就可以工作了,但这样我就会错过其余的代码: P
register
对象不是C语言的一部分,而是gcc的扩展功能。因此,在没有太多正式规范说明其预期功能的情况下谈论错误有些牵强。 - Jens Gustedt