尝试调用在程序集中定义的方法时,我收到错误“ESP 的值未在函数调用中正确保存。” ,使用 Visual Studio 2012。查看其他问题,一个共同因素是提到程序集可能没有LEAVE
每个标签末尾的说明。
我收到此错误,但使用以下代码,其中包含LEAVE
指令。
section .bss
vs: resb 13 ; 12-byte vendor string + NULL char
ns: resb 49 ; 48-byte proc. name + NULL char
section .text
global _meta_vendor
global _meta_procname
_meta_vendor:
push ebp
mov ebp, esp
mov eax, 0h
cpuid
mov [vs], ebx
mov [vs + 4], edx
mov [vs + 8], ecx
mov byte [vs + 12], 0h
mov eax, vs
leave
ret
_meta_procname:
push ebp
mov ebp, esp
mov eax, 80000002h
cpuid
mov [ns], eax
mov [ns + 4], ebx
mov [ns + 8], ecx
mov [ns + 12], edx
mov eax, 80000003h
cpuid
mov [ns + 16], eax
mov [ns + 20], ebx
mov [ns + 24], ecx
mov [ns + 28], edx
mov eax, 80000004h
cpuid
mov [ns + 32], eax
mov [ns + 36], ebx
mov [ns + 40], ecx
mov [ns + 44], edx
mov byte [ns + 48], 0h
mov eax, ns
leave
ret
然后,这些标签的函数原型位于一个仅包含以下内容的头文件中:
#include <cstdint>
extern "C" {
char* meta_vendor();
char* meta_procname();
}
关于我为什么收到此错误的任何见解?
请注意,如果我在出现的弹出窗口上单击“继续”,则会出现预期值。