小编Ben*_*ami的帖子

如何在函数调用期间保存ESP的值

我对下面的代码有问题:


void swap(int* a, int* b) {
    __asm {
        mov eax, a;
        mov ebx, b;
        push[eax];
        push[ebx];
        pop[eax];
        pop[ebx];
    }
}
int main() {
    int a = 3, b = 6;
    printf("a: %d\tb: %d\n", a, b);
    swap(&a, &b);
    printf("a: %d\tb: %d\n", a, b);
}
Run Code Online (Sandbox Code Playgroud)

我正在 Visual Studio 中运行此代码,当我运行此代码时,它显示:

运行时检查失败 - ESP 的值未在函数调用中正确保存。这通常是用一种调用约定声明的函数和用另一种调用约定声明的函数指针调用的结果。

我缺少什么?

c x86 assembly inline-assembly

0
推荐指数
1
解决办法
130
查看次数

标签 统计

assembly ×1

c ×1

inline-assembly ×1

x86 ×1