汇编语言:
本帖最后由 DarkKnight121 于 2020-11-27 17:14 编辑大家好,能不能帮我分析一下下面的代码最后输出什么?
char *str;
答案当然是字符串 '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 所指向地址处的内容。
jackz007 发表于 2020-11-25 15:46
答案当然是字符串 'mystr'
这里为什么没有入栈操作呢? DarkKnight121 发表于 2020-11-25 16:09
这里为什么没有入栈操作呢?
你是指调用 printf() 的参数入栈?如果是,会由 C 语言库函数负责自动处理。 DarkKnight121 发表于 2020-11-25 16:09
这里为什么没有入栈操作呢?
call@@1
这条语句相当于
pushreturn address
jmp@@1
所以 call 语句里包含了入栈操作
页:
[1]