【发布时间】:2014-02-07 08:59:09
【问题描述】:
我编写了一个挂钩库,它检查 PE 可执行文件 dll 导入表,以创建一个能够更改参数和返回值的库。我有几个关于如何从函数传递返回值的问题。
我了解到函数的返回值保存在累加器寄存器中。总是这样吗?如果不是,编译器怎么知道去哪里寻找函数结果?
返回类型大小呢?一个整数很容易拟合,但是更大的结构呢?调用者是否保留堆栈空间,以便它调用的方法可以将结果写入堆栈?
【问题讨论】:
-
为什么不编译几个例子自己看看呢?
-
不,ARM7 处理器没有 EAX 寄存器。其他处理器也没有。
-
很明显如果返回类型不适合
eax,它就不可能在里面。请参阅您正在使用的任何调用约定的文档。 -
底线:它完全取决于编译器及其使用的约定。 (我构建了一个在 EAX/EDX [有时] 中传递双浮点参数的编译器)。
-
如果您的方法返回 void 并通过引用或指针传递值,则不会。
标签: c++ assembly compiler-construction x86