_stdcall函数返回0xCCCCCC01

时间:2013-09-30 19:34:52

标签: assembly

我有一个简单的函数,只返回一个布尔值(现在设置为返回true)。我试图编写一个将调用它的汇编函数,并根据返回值跳转。

遗憾的是,我的函数返回0xCCCCCC01而不是预期的0x01。这是stdcall的隐藏功能吗?

2 个答案:

答案 0 :(得分:5)

_stdcall中,返回值在EAX中传递。

但是,如果你从一个函数返回一个布尔值,并且你的布尔值只有一个字节[*],你就不能用CMP EAX,...来比较返回值!

幸运的是,您可以解决EAXAL中的最低位置(它不是一个单独的寄存器,而是EAX的一部分):

xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
----------------EAX----------------
                  --------AX-------
                  ---AH--- ---AL---

[*]这是通常的惯例,因为它是您通过字节指针正确处理布尔值所需的最小量。如果你想出了自己的语言,你可以自由地要求布尔大小必须与机器寄存器大小匹配。

答案 1 :(得分:1)

写入的函数是什么语言?也许boolean在那种语言中是一个字节长。在Apple的Objective C方言中,值得注意的是,BOOL typedefchar的形式投放。

如果是这种情况,则返回值为AL,而不是EAX。

您应该使用平台/编译器/ OS /语言标记问题。