对于以下功能:
void say_hello (void) {
char name[5];
gets(name); //this is a unsafe function to use. Results in stack overflow
printf("Hello %s\n", name);
}
我知道rbp+var_5
是gets()
函数的参数,rbp+var_10
是printf
函数的参数。但是什么是rbp+var_14
?为什么要将它移入EAX寄存器?
答案 0 :(得分:1)
你向后看了。此汇编语言代码采用Intel语法,类似于instruction destination, source
。
行mov dword [ss:rbp:var+14], eax
将包含调用eax
的返回值的printf()
复制到堆栈上的临时变量中。然后抛弃该变量(之后没有代码从中读取)。