DarkKnight121 发表于 2020-11-25 15:25:52

汇编语言:

本帖最后由 DarkKnight121 于 2020-11-27 17:14 编辑

大家好,能不能帮我分析一下下面的代码最后输出什么?
char *str;

jackz007 发表于 2020-11-25 15:46:17

      答案当然是字符串 'mystr'
      char * str ;            // 定义 str 为指向字符的指针
      __asm{
                call @@1      ; 调用名为 @@1 的函数
                db 'mystr',0   
                @@1:            ; 函数 @@1 的入口
                pop eax         ; 返回地址退栈到 eax,eax 指向 call 指令的下一条指令地址,就是字符串 'mystr',0
                mov str,eax   ; 把 eax 作为地址赋值给指针变量 str
      }
      printf("%s",str);       ; 通过 C 语言库函数 printf() 按字符串形式输出 str 所指向地址处的内容。

DarkKnight121 发表于 2020-11-25 16:09:33

jackz007 发表于 2020-11-25 15:46
答案当然是字符串 'mystr'

这里为什么没有入栈操作呢?

jackz007 发表于 2020-11-25 16:25:00

DarkKnight121 发表于 2020-11-25 16:09
这里为什么没有入栈操作呢?

       你是指调用 printf() 的参数入栈?如果是,会由 C 语言库函数负责自动处理。

xieglt 发表于 2020-11-25 17:14:08

DarkKnight121 发表于 2020-11-25 16:09
这里为什么没有入栈操作呢?

call@@1
这条语句相当于
pushreturn address
jmp@@1
所以 call 语句里包含了入栈操作
页: [1]
查看完整版本: 汇编语言: