内嵌汇编语言关于push的一个问题?

Amelie
  • 74
#include <stdio.h>

int main()
{
    char varstr[100] = { 0x78, 0x56, 0x34, 0x12 };

    int vara, varb;

    _asm {
        push varstr
        lea esi, varstr
        push esi
        mov eax, [esp + 4]
        mov vara, eax
        mov eax, [esp]
        mov varb, eax
        add esp, 8
    }

    printf("%d\n%d\n", vara, varb);

    return 0;
}

VS内嵌汇编语言,问下,为什么

push varstr

压入的是0x12345678,而不是varstr的地址呢?

学过C语言,按理说varstr应该代表它的地址

但这总感觉是根据varstr的地址传入4个字节?

刚学汇编,有点不懂,请问这是怎么回事?

评论
阅读 365
1 个回答
✓ 已被采纳

c++ 与汇编混合开发是微软专用的东西,linux 下只能用嵌入16进制代码的方式。
所以微软为啥要这么设计,就得问微软了。

push varstr
push [varstr]
push dword ptr varstr

微软都会翻译成

push dword ptr [varstr]

没啥道理可讲,知道就好,想办法规避吧。

撰写回答

登录后参与交流、获取后续更新提醒

宣传栏