Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly _stdcall函数返回0xCC01_Assembly - Fatal编程技术网

Assembly _stdcall函数返回0xCC01

Assembly _stdcall函数返回0xCC01,assembly,Assembly,我有一个简单的函数,它只返回一个布尔值(现在设置为返回true)。我试图编写一个调用它的汇编函数,并根据返回值跳转 遗憾的是,我的函数返回的是0xCC01,而不是预期的0x01。这是stdcall的某些隐藏功能吗?在\u stdcall中,返回值传递到EAX 但是,如果从函数返回布尔值,并且布尔值只有一个字节[*],则不能使用CMP EAX,…来比较返回值 幸运的是,您可以通过AL(它不是一个单独的寄存器,而是EAX的一部分)处理EAX中最低的一个: [*]这是通常的约定,因为这是通过字节指针

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


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

\u stdcall
中,返回值传递到
EAX

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

幸运的是,您可以通过
AL
(它不是一个单独的寄存器,而是
EAX
的一部分)处理
EAX
中最低的一个:



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

\u stdcall
中,返回值传递到
EAX

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

幸运的是,您可以通过
AL
(它不是一个单独的寄存器,而是
EAX
的一部分)处理
EAX
中最低的一个:



[*]这是通常的约定,因为这是通过字节指针正确处理布尔值所需的最小数量。但是,如果您使用自己的语言,您可以自由要求布尔值大小必须与机器寄存器大小匹配。

函数是用什么语言编写的?在那种语言中,布尔值可能只有一个字节长。在苹果的Objective C方言中,BOOL是
typedef
作为
char
输入的

如果是这种情况,那么返回值是AL,而不是EAX


你真的应该用平台/编译器/操作系统/语言来标记这个问题。

函数是用什么语言编写的?在那种语言中,布尔值可能只有一个字节长。在苹果的Objective C方言中,BOOL是
typedef
作为
char
输入的

如果是这种情况,那么返回值是AL,而不是EAX


您应该用平台/编译器/操作系统/语言来标记问题。

显示您的函数,以及如何读取其返回值。(我肯定你已经意识到0x01是你得到的值的LSB,CCCC…是VS设置未初始化内存的地方,据我所知,所以我很确定你只是看错了。)有时候最简单的方法是作弊:用C编写函数,或者让编译器生成汇编输出,或者反汇编结果。我实际上只是查看了为函数生成的代码。结果是布尔值存储在AL中,而不是EAX中。这解释了为什么低位设置正确。显示您的函数,以及如何读取其返回值。(我肯定你已经意识到0x01是你得到的值的LSB,CCCC…是VS设置未初始化内存的地方,据我所知,所以我很确定你只是看错了。)有时候最简单的方法是作弊:用C编写函数,或者让编译器生成汇编输出,或者反汇编结果。我实际上只是查看了为函数生成的代码。结果是布尔值存储在AL中,而不是EAX中。这就解释了为什么低位设置正确。
xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
----------------EAX----------------
                  --------AX-------
                  ---AH--- ---AL---