gcc omit-frame 如何找到函数的第一个参数

源代码:

void run(int n)

{

int m = n;

}

int main()

{

run(1000);

return 0;

}

without -fomit-frame-pointer:

08048374 <run>:

8048374: 55           push   %ebp

8048375: 89 e5      mov    %esp,%ebp

8048377: 83 ec 10      sub    $0x10,%esp

804837a: 8b 45 08      mov    0x8(%ebp),%eax

804837d: 89 45 fc       mov    %eax,0xfffffffc(%ebp)

8048380: c9           leave

8048381: c3           ret

%ebp + 8 (last function addr + return ptr)

with -fomit-frame-pointer,忽略ebp成为栈指针,不能使用ebp作为栈帧回溯的途径,push %ebp;movl %esp,%ebp也就免了:

08048374 <run>:

8048374: 83 ec 10       sub    $0x10,%esp

8048377: 8b 44 24 14     mov    0x14(%esp),%eax

804837b: 89 44 24 0c     mov    %eax,0xc(%esp)

804837f: 83 c4 10       add    $0x10,%esp

8048382: c3                ret

%esp + 10 + 4 (return ptr)

gcc omit-frame 如何找到函数的第一个参数

时间: 2024-11-05 20:36:07

gcc omit-frame 如何找到函数的第一个参数的相关文章

gcc源代码分析,debug_tree()函数,又一利器啊

gcc源代码分析,debug_rtx()函数,利器啊 print-tree.c #include "config.h" #include "tree.h" #include <stdio.h> /* Names of tree components. Used for printing out the tree and error messages.  */ #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME,

关于在linux下出现stdio.h文件不存在等gcc标准库不能找到的解决办法

首先说明一下我的系统配置:ubuntu 12.04     gcc 4.6.3 有几天没有使用ubuntu了,今天拿出来编程序,刚开始编译一个uboot1.1.6的代码.出现了stdio.h:没有那么个文件或目录的错误,因为我是用的arm-linux-gcc交叉编译编的,所以我刚开始怀疑是不是我的编译器有问题.后来我去编译以前写的一个网络程序 用gcc -o test test.c  然后还是出现了stdio.h:没有那么个文件或目录的错误.然后就各种google,百度.最后的解决方案是: 我的

用C语言编写函数实现一个整数计算机,程序接受三个参数,第一个参数为操作项,后两个参数为操作数。

函数功能: 使用main函数的参数,实现一个整数计算机,程序可以接受三个参数,第一个参数"-a"选项执行加法,"-s"选项执行减法,"-m"选项执行乘法,"-d"选项执行除法,后面两个参数为操作数. 思考: 三个参数中两个操作数不用处理,直接传入即可,而对于第一个操作数就需要处理了,以保证传入的参数是"'-a','-s','-m','-d'",以便于处理计算,第一步将操作符号转化为上述赋好,然后将参数以及操

对setTimeout()第一个参数是字串的深入理解以及eval函数的理解

1 <script language="javascript" type="text/javascript"> 2 var a=1; 3 setTimeout('var a=2;alert(a)', 1000); 4 alert(a); 5 setTimeout('alert(a)',1000); 6 </script>//1 2 1; setTimeout的异步我这里就不做过多的解释(异步回调加入事件队列相关知识),主要写一下对一个参数是字

call和apply第一个参数为null/undefined,函数this指向全局对象

call和apply第一个参数为null/undefined,函数this指向全局对象,在浏览器中是window,在node中是global 在严格模式中(ie 6/7/8/9 除外),传入null/undefined,this不指向全局对象,而是null/undefined本身 'use strict' function func(){ console.log(this); } func.call(null); // null func.apply(undefined); // undefin

C/C++函数中使用可变参数

先说明可变参数是什么,先回顾一下C++里面的函数重载,如果重复给出如下声明: 1 int func(); 2 int func(int); 3 int func(float); 4 int func(int, int); 5 ... 这样在调用相同的函数名 func 的时候,编译器会自动识别入参列表的格式,从而调用相对应的函数体. 但这样的方法毕竟有限,试想一下我们假如想定义一个函数,我们在调用之前(在运行期之前)根本不知道我到底要调用几个参数,并且不知道这些参数是个什么类型,例如我们想定义一个

[转]函数getopt(),及其参数optind

getopt被用来解析命令行选项参数. #include <unistd.h>       extern char *optarg;  //选项的参数指针       extern int optind,   //下一次调用getopt的时,从optind存储的位置处重新开始检查选项.        extern int opterr,  //当opterr=0时,getopt不向stderr输出错误信息.       extern int optopt;  //当命令行选项字符不包括在opt

函数getopt(),及其参数optind

getopt被用来解析命令行选项参数. #include <unistd.h>       extern char *optarg;  //选项的参数指针       extern int optind,   //下一次调用getopt的时,从optind存储的位置处重新开始检查选项.        extern int opterr,  //当opterr=0时,getopt不向stderr输出错误信息.       extern int optopt;  //当命令行选项字符不包括在opt

getopt_long函数解析命令行参数

转载:http://blog.csdn.net/hcx25909/article/details/7388750 每一天你都在使用大量的命令行程序,是不是感觉那些命令行参数用起来比较方便,他们都是使用getopt来实现的. 在Linux下使用getopt写程序是一种比较cool的事情,下面来简单的介绍一下getopt的使用. === getopt使用 === 在讨论参数处理之前,我们先明确两个概念:选项.选项参数gcc -g -o test test.c我们经常使用上面的命令来编译程序,这里g和