gcc祼函数naked

阅读数:134 评论数:0

跳转到新版页面

分类

C/C++

正文

一、概述

1、prolog与epilog

prolog翻译过来是“序言;开端”。

epilog翻译过来是”后记;结语“。

prolog与epilog其实就是两段固定的代码,当编译器对程序进行编译的时候就会生成它们,prolog被添加到函数的开头,epilog被添加到函数的结尾。

 

二、naked函数

所谓祼函数是指使用了naked特性声明的函数,编译时不会添加prolog和epilog代码,进入祼函数代码时,父函数仅仅会将参数和返回地址压栈,亦即只有esp寄存器和eip寄存器会发生变化。

__attribute__((naked))

只有基本的asm代码可以安全的在裸函数中使用,使用扩展的asm代码或c代码可能会引起问题。

一般通过__asm ret的内嵌汇编指令返回




相关推荐

prolog和epilog其实就是两段固定的代码,当编译器对程序进行编译的时候就会生成两段代码,然后编译器会在每一个函数的开头塞入prolog代码,在每个函数的结尾塞入epilog代码。

一、概述 GCC一般包括预处理、编译、组装和链接。GCC的运行一般是调用命令gcc,在cross-compiling时使用machine-gcc或machine-gcc-version,在使用c++时

文档对应gcc版本8.4 GCC原来表示GNU C Compiler,现在一脙GNU Compiler Collection。支持C、C++、Objective-C,Objecti

一、概述 1、作用 __attribute__ 可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。

编译器中的sanitize来自于google的开源sanitizers项目,后GNU将该工具加入到GCC编译中,是查找隐藏Bug的利器。 -fsanitize=address</p

一、基本的asm 格式: asm asm-qualifiers ( AssemblerInstructions) (1)asm关键字是GNU的扩展,当编译配置项为-ansi或-std配置项时,使用__

内建函数就是编译器内部实现的函数,它们随时跟着gcc升级而变化,所以不推荐普遍的使用。使用内建函数更高效,因为它们大多以inline方式编译或者针对特定平台进行优化。 C标准库中的

在1999年的ISO C标准中,一个函数可以接收变参数,而宏定义中也可以接收变参数,例如: #define debug(for

强弱符号的链接规则 链接器会按照如下规则处理与选择被多次定义的全局符号 (1)不允许强符号被多次定义,如果有多个强符号定义,则链

在C语言编程过程中,我们常常会实现一些可变参数的函数调用(类scanf、printf函数),变参函数在我们编程过程中带来了很大的方便,但是也有一些问题,即我们在调用可变参数的函数的时候,默认情况