未知变量被移入 EAX 寄存器
Unknown variable being moved into EAX register
对于以下函数:
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 寄存器?
你倒着读。此汇编语言代码采用 Intel 语法,类似于 instruction destination, source
.
行 mov dword [ss:rbp:var+14], eax
将包含调用 printf()
的 return 值的 eax
复制到堆栈上的临时变量中。然后变量被丢弃(之后没有代码从中读取)。
对于以下函数:
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 寄存器?
你倒着读。此汇编语言代码采用 Intel 语法,类似于 instruction destination, source
.
行 mov dword [ss:rbp:var+14], eax
将包含调用 printf()
的 return 值的 eax
复制到堆栈上的临时变量中。然后变量被丢弃(之后没有代码从中读取)。