Chinaunix

标题: 如何锁定 malloc 分配出的内存 [打印本页]

作者: net小伙    时间: 2014-11-05 17:04
标题: 如何锁定 malloc 分配出的内存
为客户提供了两个库,库中包括一些借口,在客户的环境下把自己提供的所有接口都测了一遍,发现没有问题。
但是跑上客户的程序之后就会出现栈崩溃的现象。客户的代码不让看,现在怀疑是客户在处理数据的时候越界了。现在想知道是不是客户的程序访问了我们的栈,导致了程序崩溃!
对于这种现象,各位大神有没有高招???
作者: zsszss0000    时间: 2014-11-05 18:57
我不知道,但是还是很好奇,顶一下!
作者: lxyscls    时间: 2014-11-06 10:25
http://www.ibm.com/developerwork ... gccstack/index.html

GCC有选项,不过因为MIPS的cross compiler不支持,所以也没有深入使用过,可以试试
作者: BigGame_2008    时间: 2014-11-06 16:53
调用客户接口前后加上些打印,先定位一下你怀疑的是否正确!回复 1# net小伙


   
作者: BigGame_2008    时间: 2014-11-06 17:45
很好的资料,感谢分享;
有汇编方面的学习资料吗,分享一下,不胜感激啊!回复 3# lxyscls


   
作者: net小伙    时间: 2014-11-06 20:00
回复 4# BigGame_2008
是这样的,我们提供的接口,客户来调用,而客户的代码是涉密的,我们看不了,他们只给了一个可执行程序,所以一些打印信息只能加到库里,现在是我们专门写了一个测试程序调我们自己的接口,程序跑了一个周末都没问题,只要一执行客户的程序,跑一会就会段错误。

   
作者: net小伙    时间: 2014-11-06 20:59
回复 3# lxyscls

多谢了,我努力研究研究吧!
   
作者: lxyscls    时间: 2014-11-07 10:05
BigGame_2008 发表于 2014-11-06 17:45
很好的资料,感谢分享;
有汇编方面的学习资料吗,分享一下,不胜感激啊!回复 3# lxyscls


没了,我只是想起有这么个选项,搜出来的
作者: folklore    时间: 2014-11-07 10:20
自已写个_malloc和_free, 用来代替自已的库的中所有malloc, 这个新的_malloc多分配点内存, 写入一定识别内容, _free时看识别内存是不是被更改。
此外, 最少要说linux还是windows吧?
如果是windows, 你的malloc的东西不是由你而是由用户来free(当然就是linux下也不要这么做), 则Debug/Rease不一样时free会自动崩;这种情况下只要提供一个freeobject接口当用户调用它而不是直接free就可以了。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2