`
jubincn
  • 浏览: 242761 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
文章分类
社区版块
存档分类
最新评论

C中为什么参数以列表反序压入堆栈中

 
阅读更多

转自:《C和指针》中文版,p396


我们现在可以推断出为什么参数要按照列表反序压入到堆栈中。被调用函数使用帧指针加一个偏移量来访问参数。当参数以反序压入到堆栈时,参数列表的第一个参数便位于堆栈中这堆参数的顶部,它距离帧指针的偏移量是一个常数。事实上,任何一个参数距离帧指针的偏移量都是一个常熟,这和堆栈中压入多少个参数并无关系。


如果参数以相反的顺序压入到堆栈会怎样呢(即按照参数列表顺序)?这样一来,第一个参数距离帧指针的偏移量就和压入到堆栈中的参数数量有关。编译器可以计算出这个值,但还是存在一个问题 -- 实际传递的参数数量和函数期望接受的参数数量可能并不相同。在这种情况下,这个偏移量是不正确的


那么祝反序方案中,额外当参数时如何处理当呢?堆栈帧当图显示任何额外当参数都将位于前几个参数当下马,第一个参数距离帧指针的距离将保持不变。因此,函数可以正确地访问前三个参数,对于额外的参数可以简单地忽略。


附:

为什么C中实际传递的参数数量和函数期望接受的参数数量可以不相同:

因为C的方法签名中并不包含参数,即int foo(int a)和int foo(int a, int b)不能同时出现,这点和C++不一样的。

分享到:
评论

相关推荐

    C语言的反序数代码

    ### C语言中的反序数实现 #### 知识点一:程序结构与流程控制 C语言程序由一系列函数组成,其中`main()`函数是程序执行的起点。在这个示例中,`main()`函数包含了用于读取用户输入、处理数据以及输出结果的代码。...

    C语言程序设计-将主函数中输入的字符串反序存放;例如:输入字符串“abcdefg”,则应输出“gfedcba”;.c

    C语言程序设计-将主函数中输入的字符串反序存放;例如:输入字符串“abcdefg”,则应输出“gfedcba”;.c

    顺序链栈与反序链栈

    通过依次将原链表的元素压入临时栈,然后按顺序弹出并压入目标栈,可以实现链表的反序。这个过程可以是递归的,也可以通过迭代实现。 学习这两个概念,不仅可以帮助你理解链栈的基本操作,还可以提升你在数据结构...

    小型字符串反序c语言

    在C语言中,我们可以使用`char str[MAX_SIZE]`的形式定义一个最大长度为`MAX_SIZE`的字符数组。然后,通过`scanf`或`fgets`函数从标准输入获取用户输入的字符串。 例如,使用`fgets`函数可以这样获取字符串: ```c...

    输入一个字符串参数,返回反序字符串

    输入一个字符串参数,返回该字符串的反序字符串

    .编写一个函数,将数组中n个数按反序存放。 实验步骤与要求: 在主函数中输入10个数,并输出排好序的数。 编写函数invert()将10个数按反序存放。

    根据给定文件的信息,我们可以提炼出以下几个相关的知识点: ### 1. 函数invert()的实现原理 在给定代码中,`invert()`函数是用于反转数组元素的...这对于理解C语言中的指针概念和掌握基本的数据处理技巧非常有帮助。

    使传入一个字符串按反序存放

    编写c语言小程序,使传入一个字符串按反序存放,在主函数中输入和输出字符串。

    Java反序列化漏洞利用工具.zip

    Java反序列化漏洞是软件安全领域的一个重要话题,它涉及到Java应用程序在处理序列化和反序列化过程中的安全问题。序列化是将对象状态转换为可存储或传输的数据格式的过程,而反序列化则是将这些数据恢复为原来的对象...

    Java反序列化漏洞检查工具V1.2_Weblogic XML反序列化漏洞检查工具CVE-2017-10271

    Java反序列化漏洞是软件安全领域的一个重要话题,特别是在企业级应用服务器如Weblogic中,这类漏洞可能导致远程代码执行、系统权限提升等严重后果。工具"Java反序列化漏洞检查工具V1.2_Weblogic XML反序列化漏洞检查...

    Java反序列化终极测试工具

    这个“Java反序列化终极测试工具”可能是为了帮助开发者测试其应用程序中的反序列化过程,确保数据正确无误地恢复,并且可以用来检测潜在的安全问题,如利用不安全的反序列化漏洞进行攻击。 Java反序列化漏洞通常...

    STM32控制LCD12864(反序)

    由于接口反序,PA0-7应该配置为输出低电平以对应LCD的DB7-0。 2. **命令和数据传输**:LCD12864有两条控制线,RS(寄存器选择)和RW(读/写),通过它们可以区分写入数据还是指令。在反序接口下,这两个信号线也...

    反序输出- 链栈

    链栈是一种特殊的线性数据结构,它在计算机科学中被...在实现反序输出的问题中,链栈以其高效的压栈和弹栈操作,提供了简洁有效的解决方案。了解并掌握链栈的原理和应用,对于提升编程能力、解决实际问题具有重要意义。

    Java反序列化终极测试工具.zip

    在Java应用服务器如JBOSS、WebLogic和Websphere等环境中,反序列化漏洞经常被利用,因此测试和防范这些漏洞至关重要。 本压缩包“Java反序列化终极测试工具.zip”提供了两款专门用于测试Java反序列化漏洞的工具,这...

    java反序列漏洞验证工具

    Java反序列化漏洞是软件安全领域的一个重要话题,主要出现在使用Java对象序列化机制的程序中。当一个恶意用户能够控制被反序列化的对象时,可能会执行任意代码,导致系统安全风险。本工具集成了相关组件,用于检测和...

    反序之和输出

    编程序,从键盘输入正整数n,求出n与其反序数之和并输出。例如,输入2038,输出应为 2038+8302=10340。

    将十六进制代码反序输出

    将十六进制代码反序输出

    小白看得懂的MySQL JDBC 反序列化漏洞分析 - 先知社区1

    在源代码分析中,作者发现了一个可能的入口点,即在处理结果集时,驱动会尝试将结果转换为Java对象,这可能包括反序列化过程。 为了利用这个漏洞,攻击者需要了解Java序列化的机制,以及如何构造能够控制反序列化...

    java反序列化漏洞-验证.rar

    在Java编程中,序列化和反序列化是常见的数据传输和持久化手段,允许对象的状态被转换为字节流,便于存储或在网络中传输。然而,这个过程也可能带来安全隐患,当不安全的类被反序列化时,可能会导致代码执行、权限...

    shiro反序列化测试工具.zip

    在这个名为"shiro反序列化测试工具.zip"的压缩包中,包含的是用于检测Shiro框架是否存在反序列化漏洞的测试工具。这些工具可以帮助开发者或安全研究员识别并修复潜在的安全隐患,确保应用的安全性。 以下是关于...

Global site tag (gtag.js) - Google Analytics