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

#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个字节?

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

阅读 2.1k
1 个回答

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

push varstr
push [varstr]
push dword ptr varstr

微软都会翻译成

push dword ptr [varstr]

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏