如何手工展开函数栈来定位问题
- #include <stdlib.h>
- #include <stdio.h>
- static int test(int a, int b, int c)
- {
- return a+b+c;
- }
- int main()
- {
- int a = 1;
- int b = 2;
- int c = 3;
- int d = test(a, b, c);
- printf("%d\n", d);
- return 0;
- }
- Breakpoint 1, test (a=1, b=2, c=3) at test.c:7
- 7 return a+b+c;
- Missing separate debuginfos, use: debuginfo-install glibc-2.11-2.i686
- (gdb) bt
- #0 test (a=1, b=2, c=3) at test.c:7
- #1 0x08048412 in main () at test.c:16
- eax 0x1 1
- ecx 0x2c0187d8 738297816
- edx 0x1 1
- ebx 0x73fff4 7602164
- esp 0xbffff048 0xbffff048
- ebp 0xbffff048 0xbffff048
- esi 0x0 0
- edi 0x0 0
- eip 0x80483c7 0x80483c7 <test+3>
- eflags 0x286 [ PF SF IF ]
- cs 0x73 115
- ss 0x7b 123
- ds 0x7b 123
- es 0x7b 123
- fs 0x0 0
- gs 0x33 51
- (gdb) x /8x 0xbffff048
- 0xbffff048: 0xbffff078 0x08048412 0x00000001 0x00000002
- 0xbffff058: 0x00000003 0x0073fff4 0x00000001 0x00000002
- 0x08048412 in main () at test.c:16
- 16 int d = test(a, b, c);
- Value returned is $2 = 6
- (gdb) info registers
- eax 0x6 6
- ecx 0x39ff7a48 973044296
- edx 0x1 1
- ebx 0x73fff4 7602164
- esp 0xbffff050 0xbffff050
- ebp 0xbffff078 0xbffff078
如何手工展开函数栈来定位问题相关推荐
- 【C语言】二十二步了解函数栈帧(压栈、传参、返回、弹栈)
阅读本文需要掌握的知识 熟练使用--c语言函数 进入正题前 首先我们为什么要学习函数的栈帧? 简单回答就是:增加内功 学习函数调用的底层代码,了解函数如何传参.如何返回 这样对于函数的使用有很大的帮助 ...
- 通过/proc查看Linux内核态调用栈来定位问题
文章目录 1.定位一个"运行慢"的进程 2.strace -cp 27288 3. pstack 27288 3.进程状态和WCHAN字段 4.进程有什么活动或者完全挂死了? 5. ...
- 栈 -- 顺序栈、链式栈的实现 及其应用(函数栈,表达式求值,括号匹配)
文章目录 实现 顺序栈实现 链式栈实现 应用 函数栈 的应用 表达式求值中 的应用 括号匹配中 的应用 我们使用浏览器的时候经常会用到前进.后退功能. 依次访问完一串页面 a – b – c之后点击后 ...
- 函数调用过程详解:函数栈帧的创建与销毁
前言:我们在学习C语言的过程中,可以会产生很多疑问,比如: 局部变量是怎么创建的 为什么局部变量的值不做初始化就是随机值 函数是怎么传参的?传参的顺序是怎么样的? 形参和实参是什么关系? 函数调用是怎 ...
- 递归和函数栈与setjmp和longjmp的关系
递归每执行一次都会释放一次函数栈 setjmp 记录函数栈的栈顶 longjmp 寻找函数栈的栈顶 如果longjmp找到了他要寻找的函数栈顶 调用setjmp的函数栈不会被释放 所以setjmp 和 ...
- scala tail recursive优化,复用函数栈
在scala中如果一个函数在最后一步调用自己(必须完全调用自己,不能加其他额外运算子),那么在scala中会复用函数栈,这样递归调用就转化成了线性的调用,效率大大的提高.If a function c ...
- 【软件开发底层知识修炼】二十三 ABI-应用程序二进制接口三之深入理解函数栈帧的形成与摧毁
上两篇文章我们初步接触了ABI-应用程序二进制接口的概念,点击链接查看上一篇文章:[软件开发底层知识修炼]二十二 ABI-应用程序二进制接口 二.了解了为什么会有ABI的存在.本篇文章继续学习ABI ...
- 函数栈帧的创建和销毁图解
目录 一.问题: 二.寄存器 栈区 1.寄存器有哪些?有什么作用? 2.编译环境 3.栈区的使用习惯: 4.main函数也是被其他函数调用的 5.汇编代码 三.为main函数创建栈帧 1.main函数 ...
- c++ 写x64汇编 5参数_第9篇-C/C++ x86_64的函数栈
这是程序栈话题的最后一篇,可能有人会问,你前面5篇写那么多x86程序栈的文章干什么?请耐心看下去,即便现在x64硬件流行的今天,x86的过程调用约定仍然有存在的现实意义,这个戏说程序栈的最终篇,我们探 ...
最新文章
- [转载]Python爬虫入门三之Urllib库的基本使用
- LeetCode35.搜索插入位置
- python多线程爬虫界面_多线程网页爬虫 python 实现
- 矩阵的乘法通用模板(C++/Java)
- php flash chart,openflashchart 2.0 简单案例php版
- qt中判断对象是否为空的方式
- ANTLR VS FLEXBISON
- yum方式安装android_linux yum 命令 详解
- Android多媒体学习八:调用Android自带的音频录制程序,实现录制
- JavaScript中必须掌握的10个难点(必看)
- freebsd mysql utf8_FreeBSD环境下Mysql问题解决方法集锦
- Linux内存分配器SLOB,深入理解Linux内核之SLOB分配器
- imx6 rtl8821cs wifi驱动调试
- 大牛直播SDK-Windows推送端使用说明
- 2手房地产营销企划书
- 删除文件时提示正在被使用无法删除问题/删除dll文件
- 汽车维修企业管理【15】
- 网易云信 android,Android 网易云信集成(一)
- 微信小程序——手机号登录
- 数据结构中的“阴”和“阳”