-2

I want to understand at low level how an input is given to a function. What exactly happens once a function runs? For example, consider the following:

int foo(int t1, int t2)
{  
  Function defintion goes here  
}

Then later in the code

main()
{
  .
  .
  int a= foo(23, 24);
  . 
  .
 }

Suppose the code is compiled successfully and we get a binary file, i.e an .exe file corresponding to our high level source code. I want to understand at what level the inputs are given to functions internally and what exactly happens when we double click on this .exe file. What softwares/hardwares come into play after clicking the .exe? I will appreciate if some can give me a brief description.

As requested

O.S: Windows CPU: Intel Core2Duo

4

2 回答 2

1

就函数调用而言,首先,文字2324被加载到 CPU 中的特定寄存器(用于函数参数的寄存器)。然后,您的代码会在找到该函数时跳转到某个部分foo

foo从上面提到的寄存器中读取以访问t1and t2,计算返回值,并将该值存储在另一个寄存器中。然后, foo 跳回到它在 main 中被调用的地方。

Main 然后从存储 foo 的返回值的寄存器中读取,并将该值放入变量x中。

这是对函数调用所发生情况的高级描述。更详细的解释可能无法从堆栈溢出帖子中获得(但也许不是)。

于 2013-03-12T14:26:11.800 回答
0

您需要更具体地了解您为其编写代码的平台。不同的硬件和软件平台使用不同的ABI,即调用之间传递参数的方式。

此外,它可能取决于您使用的编译器版本和语言方言。

http://en.wikipedia.org/wiki/X86_calling_conventions http://en.wikipedia.org/wiki/Application_binary_interface

要获得答案,您需要指定:硬件平台、操作系统版本、要使用的编译器和编写此东西的语言(C/C++)或仅使用调用约定。

差异示例: 在 ARM 上,一些参数可以通过寄存器传递,而一些参数可以通过堆栈传递。在 x86 上,大多数参数在堆栈上传递(C++ 方法除外),参数的顺序由使用的语言和约定定义,对齐是标准问题,或者在 M-soft 的情况下,商业规范.

于 2013-03-12T14:54:32.983 回答