首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏CTF学习笔记

    C语言函数调用约定

    00 00 mov DWORD PTR [ebp-0x4],0x28 //d a1(a,b,c,d); // cdecl ,C语言默认调用约定,参数通过从右向左的顺序压栈 函数调用方和被调用方必须遵守同样的约定,即调用约定(Calling Convention)。 函数调用惯例在函数声明和函数定义时都可以指定,语法格式为: ‌返回值类型 调用惯例 函数名(函数参数) int __cdecl max(int m, int n); // __cdecl是C语言默认的调用约定 ,在平时编程中,我们并没有去指定调用约定,就使用默认的 __cdecl。 除了 cdecl,还有其他调用约定: 调用约定 参数传递方式 参数出栈方式 名字修饰(编译器重命名函数) cdecl 从右到左的顺序入栈 调用方(caller) _+

    97210编辑于 2023-12-20
  • 来自专栏陶士涵的菜地

    Go语言圣经--接口约定习题

    Go语言圣经-接口 1.接口类型是对其它类型行为的抽象和概括 2.Go语言中接口类型的独特之处在于它是满足隐式实现的 3.Go语言中还存在着另外一种类型:接口类型。

    55420发布于 2019-09-10
  • 来自专栏网络安全-小白进阶记

    c语言调用约定与底层汇编

    ret:将eip的值返回到esp中 调用约定: fastcall 前两个参数放入ecx,edx,后面参数从右往左依次入栈,被调用者栈平衡 stdcall 参数从右往左依次入栈,被调用者栈平衡 thiscall xxx:栈平衡 image.png 栈是每个线程都必须拥有的空间,是一个内存 char类型和short类型参数都是以4字节入栈存储的,不够就补,但是printf中会提升到八个字节 不写调用约定默认是 __cdecl调用约定 调用者:调用函数的函数

    2.3K10发布于 2019-07-25
  • 5.5 汇编语言:函数调用约定

    函数是任何一门高级语言中必须要存在的,使用函数式编程可以让程序可读性更高,充分发挥了模块化设计思想的精髓,今天我将带大家一起来探索函数的实现机理,探索编译器到底是如何对函数这个关键字进行实现的,并使用汇编语言模拟实现函数编程中的参数传递调用规范等 说到函数我们必须要提起调用约定这个名词,而调用约定离不开栈的支持,栈在内存中是一块特殊的存储空间,遵循先进后出原则,使用push与pop指令对栈空间执行数据压入和弹出操作。 V:类Linux系统默认约定,前八个参数放入(RDI,RSI, RDX, RCX, R8, R9),剩下的参数压栈保存.首先先来写一段非函数版的堆栈使用案例,案例中模拟了编译器如何生成Main函数栈帧以及如何对栈帧初始化和使用的流程 CDECL调用约定的特点是简单易用,但相比于其他调用约定,由于栈平衡的操作需要在函数返回后再进行,因此在一些情况下可能会带来一些性能上的开销。 该约定会采用复写传播优化,将每次参数平衡的操作进行归并,在函数结束后一次性平衡栈顶指针esp,且不定参数函数也可使用此约定

    65620编辑于 2023-08-22
  • 5.5 汇编语言:函数调用约定

    函数是任何一门高级语言中必须要存在的,使用函数式编程可以让程序可读性更高,充分发挥了模块化设计思想的精髓,今天我将带大家一起来探索函数的实现机理,探索编译器到底是如何对函数这个关键字进行实现的,并使用汇编语言模拟实现函数编程中的参数传递调用规范等 说到函数我们必须要提起调用约定这个名词,而调用约定离不开栈的支持,栈在内存中是一块特殊的存储空间,遵循先进后出原则,使用push与pop指令对栈空间执行数据压入和弹出操作。 System V:类Linux系统默认约定,前八个参数放入(RDI,RSI, RDX, RCX, R8, R9),剩下的参数压栈保存. CDECL调用约定的特点是简单易用,但相比于其他调用约定,由于栈平衡的操作需要在函数返回后再进行,因此在一些情况下可能会带来一些性能上的开销。 该约定会采用复写传播优化,将每次参数平衡的操作进行归并,在函数结束后一次性平衡栈顶指针esp,且不定参数函数也可使用此约定

    67620编辑于 2023-10-11
  • 来自专栏陶士涵的菜地

    Go语言圣经--接口约定习题2

    len("{"){ buf.WriteByte(' ') } //重点:使用了接口约定

    42820发布于 2019-09-10
  • 来自专栏爱打音游的大A

    调用约定

    调用约定   本文内容概括自IDA pro权威指南第66页到第69页6.2.1节调用约定   调用约定指定函数调用方放置调用函数时所需参数的具体位置(如栈中、寄存器中),此外,还约定了再函数调用结束后由谁负责从栈中删除这些参数 在使用IDA的F5功能时经常能够看到函数签名中带有cdecl、fastcall等字样,这些就是调用约定。调用约定是通常是特定于语言、编译器和CPU的,这里只简单了解一下主流的调用约定。 C调用约定(cdecl)   x86体系结构的许多C编译器使用的默认调用约定叫做C调用约定(cdecl)。 标准调用约定(stdcall)   标准调用约定的“标准”是由微软为自己的调用约定所起的名称stdcall得来。 C++语言标准未规定应如何向非静态成员函数传递this指针,因此,不同编译器使用不同的技巧来传递this指针。 其他调用约定

    1.3K40编辑于 2023-02-14
  • 来自专栏喵叔's 专栏

    Entity Framework 约定

    约定,类似于接口,是一个规范和规则,使用Code First 定义约定来配置模型和规则。在这里约定只是记本规则,我们可以通过Data Annotaion或者Fluent API来进一步配置模型。 约定的形式有如下几种: 类型发现约定 主键约定 关系约定 复杂类型约定 自定义约定 零、类型发现约定 在Code First 中。 当EF提供的默认约定都不符合我们要求的时候,我们可以使用自定义约定。 ,最后一个约定将覆盖前面所有相同的约定。 ,有可能会受到默认原定的影响,这时我们可以用到:*AddBefore 和 AddAfter 方法,例如:将我们前面创建的约定放在内置约定发现逐渐约定之前运行。

    1.8K10发布于 2020-09-08
  • 来自专栏Java技术详解

    约定大于配置

    约定大于配置是美国计算机毕业生论文中提出来的。一个应用上线之后会生成很多的基础开发文档和用户手册。配置接口尽量留取较小。用户既是上帝。用户体验和用户的使用反馈很重要。很多的数据参数都是有默认的数据值。

    35620编辑于 2023-08-19
  • 来自专栏GreenLeaves

    EF 约定介绍

    当前环境为EF Code First开发模式中 一、EF默认约定 1、常用约定 (1)、当没有显示指定实体主键的时候,EF会默认将长得最像Id的属性(且类型为GUID)设为主键 (2)、设计实体时,当一个实体包含一个集合属性 5、复杂类型约定(Complex Types Conventions) 如果Code First无法从类型中推测出主键,也没有通过Data Annotations或者Fluent Api进行注册的主键, (Connection String Conventions) EF 数据库连接约定(Connection String Conventions in Code First) 二、移除约定 EF提供了移除默认约定的方法 ,通过该方法我们可以移除所有定义在System.Data.Entity.ModelConfiguration.Conventions namespace下的约定,例如,移出表名复数约定,代码如下: public modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); } } 三、自定义约定 EF 自定义约定

    2.4K100发布于 2018-01-26
  • 来自专栏前端笔记本

    用键盘8个键演奏一首蒲公英的约定

    image.png 用键盘8个键演奏一首蒲公英的约定送给996的自己或月亮代表我的心给七夕的她,非常简单~ 这个项目仅仅用了几个简单的前端技术实现,献给每一位挚爱音乐的代码家? _white { display: flex; flex-direction: column-reverse; background: linear-gradient(-30deg, #f8f8f8 this[name].style.background = `linear-gradient(-30deg, #f8f8f8, #fff)` : this[name].style.background 看完上面的数组简谱当然肯定会有同学问,上文的数组里面不止运用到8个键吧,如果仔细观察,就会发现这里只用了中音和高音,也就是纯数字键(1-7)和Option键的配合,连半音都没用到,所以实际止用到了8个键而已 ', 'Option+1', 'Option+1', // 一起长大的约定...

    1.3K20发布于 2020-06-06
  • 来自专栏Eureka的技术时光轴

    函数调用约定

    现代的几乎所有的编程语言都离不开函数和参数的概念。而这个概念是编程语言级别的,而不是硬件级别的。也就是说硬件上本来没有函数的概念。只是函数的用的太普遍,硬件开始为函数准备专用的指令。 几乎所有的编程语言都需要设计如何传递参数,如何返回函数执行的结果。 芯片只是规定了指令集,只要是指令集中的指令都是可以执行的正确指令,而函数是语义级别的功能块,如何让函数的大厦在指令集之上建立起来就是函数调用约定。 与fastcall的区别是其使用XMM/YMM开传递vector类型的参数 Vs2013 __vectorcall Fastcall(64) 前4个参数按需进入RCX, RDX, R8, This指针进入ECX 固定大小参数被调用方清理,可变长度参数调用方清理 System V AMD64 ABI 参数按照如下顺序直接进入寄存器:RDI, RSI, RDX, RCX , R8,

    3.2K20发布于 2019-08-13
  • 来自专栏E条咸鱼

    函数调用约定

    (x64架构的程序在使用寄存器传参的时候无需调整栈帧) 这种将函数参数顺序压入栈中以及进行栈帧调整的现象叫做函数调用约定。 函数调用约定 1、类型 函数调用约定有三种类型,分别为: __cdecl __stdcall __fastcall 2、区别 _cdecl:是C或C++默认的函数调用方式,函数参数从右向左入栈,主调函数负责栈平衡 样例分析 https://www.cnblogs.com/-qing-/p/10674223.html https://jingyan.baidu.com/article/574c521958be5f6c8c9dc111

    2.7K50发布于 2020-08-17
  • 来自专栏call_me_R

    Java 命名约定

    原文 - Java Naming Conventions - By Lokesh Gupta Java 命名约定体提一种指导规范,在应用开发的过程中,程序开发者遵守这些指导规范来产出一致且易读的代码 常量命名约定 Java 常量应该是全大写的字符,多个字符之间使用 _ 字符来连接。 请确保在常量中使用 final 修饰符。 泛型命名约定 泛型参数名应该是单个大写的字符。推荐使用 T 字母。在 JDK 类中,字母 E 通常用于作为集合类中,字母 S 通常用于服务加载类中,字母 K 和 V 通常用于映射类中的键和值的类型。 interface Map <K, V> {} public interface List<E> extends Collection<E> {} Iterator<E> iterator() {} 8.

    84230编辑于 2023-08-13
  • 来自专栏喔家ArchiSelf

    API的性能约定

    API 的性能分类 先看一段C语言的代码: fs = fopen("~abel/mydata.txt", "r"); for ( i=0; i<10000; i++) { ch = 对于API函数fgetc而言,大多数程序员被告知使用这个库函数来获取每个字符并不是最快的方法,注重性能的人会读取一个大型的字符数组,并使用不同编程语言中的数组或指针操作提取每个字符。 API的性能约定 为什么 API 必须遵守性能约定呢?因为应用程序的主要结构可能取决于 API 是否遵守了这样的性能约定。程序员根据性能期望选择 API、数据结构和整个程序结构。 每次应用程序绑定到动态库或在操作系统接口上时,都需要验证组合的正确性和API的性能约定。 诚然,API的性能约定没有功能正确性约定那么重要,但是软件系统的核心体验往往取决于它。 JavaScript,至少熟悉React/Vue中的一种框架,有前端项目开发经验 DevOps意识,了解系统全链路跟踪,具备一定的数据分析能力 良好的团队合作态度,具有工匠精神,具有较强的沟通能力 如果对自然语言处理或深度学习技术有了解

    80220发布于 2021-09-27
  • 来自专栏喔家ArchiSelf

    性能约定:API 限速

    8. 小结 在快节奏的 API 世界中,速率限制就像节奏设定器一样,确保一切顺利而有效地运行。

    1.6K10编辑于 2025-01-13
  • 来自专栏玩转JavaEE

    elasticsearch API约定(一)

    前面我们介绍了一些REST API的基本用法,使读者对API的使用有了一个直观的了解,本文我们来介绍下Elasticsearch中的API约定,这些约定适用于大部分的REST API,在后面文章的介绍中 ,除非另有说明,否则本文所介绍的API约定都将适用于相应的API。

    1.1K30发布于 2018-12-13
  • 来自专栏跟Qt君学编程

    翻译 | QML编码约定

    本文翻译自: https://doc.qt.io/qt-5/qml-codingconventions.html 原作者: Qt官网   本文档包含我们在文档和示例中应该遵循的QML编码约定,并建议其他人也遵循 ); console.log("MouseArea was clicked at scene pos " + scenePos); } } 0x05 相关阅读 Qt高级编码约定

    1.2K20发布于 2020-02-14
  • 来自专栏跟Qt君学编程

    Qt高级编码约定

    本文翻译自: https://wiki.qt.io/Coding_Conventions 原作者: Qt 原文发布时间:2015年1月14日   这是我们在编写Qt代码时使用的高级编码约定的概述。 Qt源代码中的约定 所有代码仅是ascii(仅7位字符,如果不确定,请运行man ascii). 因为我们内部的语言环境太多,而且UTF-8和latin1系统的组合不健康。 示例:QString s = QString::fromUtf8("13\005"); 对于文档中的变音符号或其他非ASCII字符,请使用qdoc的命令或使用相关的宏。例如\uuml表示ü。 公共头文件的约定 我们的公共头文件必须在某些用户的严格设置下仍然有效。 */ C++11使用约定 注意:本节尚未被统一接受。本节将作为进一步讨论的基准。

    2.5K30发布于 2019-12-25
  • 来自专栏玩转JavaEE

    elasticsearch API约定(二)

    前面我们介绍了一些REST API的基本约定,包括多个索引以及索引名称中的Date Math支持,本文我们来继续上文的话题,主要来看看公共参数和URL访问控制。 Parameters REST参数(使用HTTP时,映射到HTTP URL参数)遵循使用下划线的约定

    1.1K20发布于 2018-12-14
领券