免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2184 | 回复: 9
打印 上一主题 下一主题

怎样查看栈上的数据 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-09-14 08:21 |只看该作者 |倒序浏览
有没有获取栈上数据的api函数。
可以获取比如当前函数栈上一共用了多少内存,栈顶指针,该栈上所有数据的dump。

论坛徽章:
0
2 [报告]
发表于 2006-09-14 15:56 |只看该作者
哎呀,又沉了……
最近问的问题都没有人回答,呵呵

只要能获取当前栈上的数据就行,最好是叫get....的函数,然后printf就行了。没有函数不改变代码也行,有什么工具能用么?

论坛徽章:
0
3 [报告]
发表于 2006-09-14 15:58 |只看该作者
STACK上的数据不都是你自己声明使用的数据吗,还有什么工具看?

论坛徽章:
0
4 [报告]
发表于 2006-09-14 16:06 |只看该作者
先谢过!!

最近用动态解析工具purify解析之后,出现了好多
bsw(beyond stack write)
ipw(invalid pointer write)
错误。工具给出了stack call履历,栈顶指针,frame point,写入的地址和具体写了多少字节

而从代码级别上根本就看不出来什么错误
我想也许用什么方法把出问题的函数的栈里都有什么打出来可能能有帮助……?

论坛徽章:
0
5 [报告]
发表于 2006-09-14 16:09 |只看该作者
可能是STACK变量太多


这样的程序:

func()
{
int i, j, k;
int b[120345];
char c[1456];
char str[] = "11111111119iasfklkalsklasfklklfsakljsfdakljkaljsfdkjlasfdjklsfadkjlafksdjlkjlasfdkjlsadfkjldsfakjlsdafkjldfaskjlfasdkljfasdklkljdsafkjlsdfakjlfasdkjlsdfakjldfkslajkajasdfklklafsdkljasfdklasfdklklsfadjkljasfdkljasfdkljsfadklfsdaklfasdkljkljasfdkljsadkljfsdakljkljafsd";




}

造成的

要查找这个也不用什么工具,gdb不可以吗

论坛徽章:
0
6 [报告]
发表于 2006-09-14 16:16 |只看该作者
不怕大侠笑话,没用过gdb(哭)

你的程序没看出来什么问题啊……(再哭)

发生问题的call栈上的数据加一起没到100k(三哭)

论坛徽章:
0
7 [报告]
发表于 2006-09-14 17:09 |只看该作者
假设一个函数栈上保存返回地址的地址是1000的话,那么保存参数的地质应该>1000,而保存局部变量的地质应该<1000

我的理解对吗?
(还是os根据情况而定,并没有什么规律?)

论坛徽章:
0
8 [报告]
发表于 2006-09-14 17:37 |只看该作者
貌似用ebp-esp就可以了吧

论坛徽章:
0
9 [报告]
发表于 2006-09-14 17:44 |只看该作者
怎样得到这两个值?

论坛徽章:
0
10 [报告]
发表于 2006-09-14 18:29 |只看该作者
获取 esp 值必须要嵌入汇编。

获取 ebp 值两种方法。
1、嵌入汇编  
2、利用函数参数
获取上一 stack frame 值

  1. void foo(int i)
  2. {
  3.        int *p = &i;
  4.        int ebp = *(p-2);

  5.        printf("%x\n", ebp);
  6. }
复制代码


获取本函数 stack frame 值

  1. void foo(int i)
  2. {
  3.        int ebp = (int *)&i - 2;
  4.        printf("%x\n", ebp);
  5. }
复制代码



获取 stack 数据也很容易嘛。
既可用 ebp 做偏移,也可以用指针偏移。

[ 本帖最后由 mik 于 2006-9-14 21:55 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP