首页 > 其他分享 >c语言·其三

c语言·其三

时间:2024-08-04 15:17:42浏览次数:15  
标签:语言 int 其三 分配 eax ebp ptr 字节

返回值

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

相关文章

  • Linux--shell脚本语言—/—<2>
    一、shell基本语法1、shell字符串        字符串(String)就是一系列字符的组合。字符串是Shell编程中最常用的数据类型之一(除了数字和字符串,也没有其他类型了)字符串可以由单引号''包围,也可以由双引号""包围,也可以不用引号。它们之间是有区别的。 1) 字符串举......
  • Linux--shell脚本语言—/—<1>
    一、shell简介        Shell是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支        Shel......
  • 代码优化:使用C语言重构单片机汇编启动代码
    目录前言实现思路单片机启动流程汇编语言分析开发环境代码分析总结前言在近期的工作需求中,我需要对实时操作系统(RTOS)的底层代码进行一些必要的调整。为此,我重新深入研究了ARM架构的相关知识点。在这一过程中,我回顾了之前一直让我感到困惑的一个技术问题:在几乎所有的......
  • 15.75.【C语言】表达式求值
    目录一.整型提升1.定义2.一.整型提升1.定义C语言中整型算术运算总是至少以缺省(默认)整型类型的精度来进行的。为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升2.整型提升的原因:表达式的整型运算要在CPU的相应运算器件......
  • LLVM编译Fortran语言的全过程
    以一个给数组求和的程序来作为例子,编译器使用的是LLVM18.1.8!sum.f90programsum​ integer,parameter::n=30 real(4),dimension(n)::array real(4)::result integer::i​ doi=1,n   array(i)=i enddo​ ......
  • 关于C语言中素数的求解
    什么是素数?一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做素数。(素数=质数)在C语言中求解素数的几种方法。方法一:直接试数法(从1开始逐一试数)例:求解100到200之间的素数。#include<stdio.h>intmain(){ inti=0; intcount=0; for(i=100;i<=......
  • R语言统计分析——描述性统计
    参考资料:R语言实战【第2版】1、整体统计    对于R语言基础安装,可以使用summary()函数来获取描述性统计量。summary()函数提供了最小值、最大值、四分位数、中位数和算术平均数,以及因子向量和逻辑向量的频数统计。myvars<-c("mpg","hp","wt")summary(mtcars[myvars]......
  • Flink开发语言选择:Java还是Scala?
    在大数据处理领域,ApacheFlink因其高性能、低延迟和强大的数据流处理能力,成为了广泛使用的流处理框架。然而,在决定使用Flink进行开发时,选择合适的编程语言——Java还是Scala——往往是一个重要的考虑因素。本文将探讨这两种语言在Flink开发中的优劣,并帮助开发者做出最适合自己......
  • 第6天:信息打点-Web 架构篇&域名&语言&中间件&数据库&系统&源码获取
    #知识点:1、打点-Web架构-语言&中间件&数据库&系统等操作系统:有些漏洞出现的系统不一样、便于知道哪些漏洞可以在目标上攻击Windows&linux开发语言:漏洞的开发语言中间件容器IIS&Apache&Nginx&Tomcat&Weblogic&jboosASP&PHP&Java&python&JavaScript等2、打点-Web源码-......
  • 实现一个终端文本编辑器来学习golang语言:第二章Raw模式下的输入输出
    从第二章开始,在每个小节的最后都会有一些代码实操作业,你可以选择自己完成(比较推荐),再对照我的实现方式,当然也可以直接看我的代码实现。不过,之后的各个功能实现,我都会基于我先前的代码实现版本,在它的基础上进行扩展。首先,我们先来解决第一章遗留的第一个问题:输入数据会被stdin缓存......