返回值
8位—al
16位—ax
32位—eax
64位—eax(放低位,edx(高位
64:
32:
1、char(两个字节)类型的返回值
2、short(两个字节) 类型的返回值
3、int (八个字节)类型的返回值
参数传递
无论是char还是short类型,反汇编中都是以4个字节传递
结论:整数类型的参数,一律使用int类型
—————————————————————————————————————
例子:
//函数定义:
void Plus(int x) //[ebp+8]
{
x = x + 1;
}
//入口函数
int main(int argc, char* argv[])
{
int x = 1; //[ebp-4]=1
Plus(x);
printf("%d\n",x);
return 0;
}
[ebp+8]放入了eax,eax+1,eax放入[ebp+8]
所以和[ebp-4]无关,printf出来为1
—————————————————————————————————————————————————
void Function()
{
int x = 1;
int y = 2;
int r;
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
r = arr[1];
eax,duord ptr [ebp-30h]
dword ptr [ebp-0Ch],eax
r = arr[x];
ecx,duord ptr [ebp-4]
edx,dword ptr [ebp+ecx*4(int:四个字节)-34h] //ecx=1,1×4-34=30 结果:ebp-30h
r = arr[x+y];
eax,duord ptr [ebp-4]
eax,dword ptr [ebp-8]//eax=3
ecx,dword ptr [ebp+eax*4-34h] //eax=3,3×4=c,34-c=28,结果:ebp-28h
r = arr[x*2+y];
}
——————————————————————————————————————————————————
———————————————————————————————————————————————————
分配
当是空函数时,缓冲区分配40h
当有定义的变量时,缓冲区分配40h+
注:40h是不确定的,看是什么编译器
小于“本机尺寸”则按“本机尺寸”分配(若<4,则分配4个字节大小空间)
数组分配时,按类型大小分配
注:char a[3]与[4]分配的长度是一样的(都是四个字节,可以理解为熟人住标间)
参数:在函数调用的时候分配的值
局部变量:在函数执行的时候分配的值
标签:语言,int,其三,分配,eax,ebp,ptr,字节 From: https://www.cnblogs.com/yuli10952/p/18336869