Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
381 views
in Technique[技术] by (71.8m points)

内嵌汇编语言关于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
%d
", vara, varb);

    return 0;
}

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

push varstr

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

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

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

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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

push varstr
push [varstr]
push dword ptr varstr

微软都会翻译成

push dword ptr [varstr]

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...