[英]debugging the assembly equivalent of a c code to understand the function call
出于好奇,我一直在研究传递给函数的值是如何由调用的函数实际操作的。 为了使我的疑问更清楚,我了解到编译器会生成一个代码,用于按顺序对它进行编译的ac代码(如果我错了,请更正)。 我的疑问是如何在调用的函数中访问参数值? 我的意思是参数必须是调用函数的一部分(例如我给定示例中的main())。 编译器如何安排在调用函数中传递的值与在调用函数中访问的值相同。 为了明确我的观点,请查看以下代码:
#include <stdio.h>
void check(int);
int main()
{
check(9999);
}
void check(int a)
{
int b;
b = a;
}
在上面的代码执行完代码后,值b = 9999
; 但如何来的值a
在功能check()
获得的值9999
在组装时的水平功能check()
是从被称为main()
就像参数存储在某些寄存器中,然后使用check()
中的那些寄存器进行相应访问一样吗? 我希望你理解我的问题。
您可以使用gcc -S source.c
或gcc -S source.c -O2
这两个命令都生成汇编代码,但是第一个命令生成的代码没有优化,并且参数将通过堆栈传递,然后第二个cammand与优化,参数将通过寄存器传递
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.