- 1
- 0
- 约小于1千字
- 约 2页
- 2017-06-08 发布于重庆
- 举报
一步一步写算法(之函数堆栈显示)
一步一步写算法(之函数堆栈显示)
在继续图的讨论之前,我们今天开个小差,讨论一下函数堆栈的基本原理。有过编程经验的朋友都知道,堆栈调试是我们在程序开发中经常应用的一个功能。那么大家有没有想过,函数堆栈是怎么开始的啊?其实我们可以自己写一个函数堆栈输出函数分析一下。 因为一般来说,函数的压栈过程是这样的: | 参数三 | | 参数二 | | 参数一 | | address| | ebp | | variable | 那么堆栈中的内容是怎么打印的呢?
[cpp] view plaincopy
void stack_print int var_ebp; __asm mov var_ebp, ebp; printf %08x\n, * int* var_ebp + 1 ; 上面的代码只是打印当前函数的返回地址,那么如果是连续的函数打印呢?打印到main函数开始呢。[cpp] view plaincopy
void stack_print int var_ebp; __asm mov var_ebp, ebp; do printf %08x\n, * int* var_ebp + 1 ; var_ebp * int* var_ebp ; while var_ebp ! 0x0 ; 上面的代码可看到一对地址,那么怎么把这些地址和函数名称对应起来了,那就只能查表了。函数对应的表在哪里呢?不着急,看了下面的一个截图,朋友们就明白怎么回事了。 大家这样在VC编译的时候把Generate mapfile选上,就可以生成对应的*.map文件了。文件中包含了当前文件中主要函数的起始地址,而且是按照从低到高依次排序的。所以只要寻找到对应的函数起始,判断我们的函数返回地址是不是在这个函数中间,那么就可以找到对应的函数名称了。
总结: (1)今天总结了一下函数堆栈显示的基本原理; (2)知道函数的基本原理之后,方便我们从本质上理解很多问题。即使很多CPU的处理方式和X86不同,我们也可以通过类似的方法快速掌握; (3)堆栈原理十分重要,朋友们应该好好了解一下。 软件英才网 软件行业驰名招聘网站 有需要请联系我们
您可能关注的文档
- 香糟卤凤爪的经典做法--非常实用.doc
- 马克思主义原理概论模拟题(附答案).doc
- 香菇的种植方法资料.doc
- 马克思主义基本原理概论参考答案5.doc
- 一次性用品的坏处【作文】.doc
- 一次性精密输液器.doc
- 一次性打火机用完不要摔.docx
- 一次性打火机用完千万别扔.docx
- 一次性纸杯新国标实施太原市场在售产品基本不合格.doc
- 一次成型倒角刀具中文介绍.doc
- 2025-2026学年天津市和平区高三(上)期末数学试卷(含解析).pdf
- 2025-2026学年云南省楚雄州高三(上)期末数学试卷(含答案).pdf
- 2025-2026学年甘肃省天水市张家川实验中学高三(上)期末数学试卷(含答案).docx
- 2025-2026学年福建省厦门市松柏中学高二(上)期末数学试卷(含答案).docx
- 2025-2026学年广西钦州市高一(上)期末物理试卷(含答案).docx
- 2025-2026学年河北省邯郸市临漳县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省石家庄二十三中七年级(上)期末历史试卷(含答案).docx
- 2025-2026学年海南省五指山市九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省唐山市玉田县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省邢台市市区九年级(上)期末化学试卷(含答案).docx
原创力文档

文档评论(0)