博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

飞翔,嵌入式linux

linux嵌入式系统必将大行于天下。专注于linux嵌入式系统的搭键,专注于高效稳定软件的开发,专注底层程序调试技术。
  feixiang.cublog.cn

关于作者
姓名:飞翔
Email:loughsky@sina.com
职业:IT
年龄:32
位置:北京
个性介绍:专注在嵌入式操作系统,以及高效程序调试
|| << >> ||
我的分类


使用ptrace 截获系统调用
这两天正在书写,内存分析软件,今天刚刚完成,计划分为3个层面,一个是通过/proc/pid/stat信息,显示出操作系统级别,物理内存使用曲线;一个是截获有管内存分配的系统调用,获得虚拟内存使用曲线;一个是获得malloc等的日志,来获得具体内存使用情况。
 
在截获有关内存分配的系统调用时:
brk,和mmap的参数传递很简单,他们都是通过寄存器来传递参数
        m_sys->param[0] = ptrace(PTRACE_PEEKUSER,pid, 4 * 0,NULL);
        m_sys->param[1] = ptrace(PTRACE_PEEKUSER,pid, 4 * 1,NULL);
        m_sys->param[2] = ptrace(PTRACE_PEEKUSER,pid, 4 * 2,NULL);
        m_sys->param[3] = ptrace(PTRACE_PEEKUSER,pid, 4 * 3,NULL);
        m_sys->param[4] = ptrace(PTRACE_PEEKUSER,pid, 4 * 4,NULL);
        m_sys->param[5] = ptrace(PTRACE_PEEKUSER,pid, 4 * 5,NULL);
 
old_mmap的参数传递与其不同,其使用堆栈来传递参数,获得方法
        m_sys->syscallno = ptrace(PTRACE_PEEKUSER,pid, 4 * ORIG_EAX, NULL);
        m_sys->param[0] = ptrace(PTRACE_PEEKUSER,pid, 4 * 0,NULL);
        ptrace_read(child,PTRACE_PEEKDATA,m_sys.param[0],(void*)m_sys.param,sizeof(m_sys.param));
 
其中
struct msyscall
{
    long syscallno;
    long ret;
    long param[6];
};
 

发表于: 2007-04-18,修改于: 2007-04-18 16:32,已浏览1190次,有评论6条 推荐 投诉


网友评论
网友: snowwa 时间:2007-04-22 22:21:04 IP地址:221.221.58.★
我正在测嵌入式操作系统,能给些建议么
我的邮箱:snowwa@126.com

网友: 本站网友 时间:2007-04-22 23:04:14 IP地址:219.142.236.★
你准备怎么测试,想测什么?

网友: lllady00 时间:2007-05-12 10:04:59 IP地址:221.204.113.★
请问如何编写一个程序,用ptrace 获取一个程序运行时的系统调用号

网友: 本站网友 时间:2007-05-13 21:51:19 IP地址:219.142.237.★
推荐你看下面两篇文章,如果是X86的机器,就非常容易了。
Playing with ptrace, Part II 
http://blog.chinaunix.net/u/30686/showart_250601.html

Playing with ptrace, Part I 
http://blog.chinaunix.net/u/30686/showart_250595.html

网友: lllady00 时间:2007-05-15 17:07:47 IP地址:221.204.112.★
谢谢大虾

网友: lllady00 时间:2007-05-15 17:17:19 IP地址:221.204.112.★
还有一个问题要请教
linux下用adsl如何上网
为什么老提示:can/t read file /var/run/pppoe-config.pppoe.pid.pppeo

 发表评论