Chinaunix首页 | 论坛 | 博客
  • 博客访问: 228949
  • 博文数量: 48
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 412
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-24 10:27
个人简介

Continuous pursuit technical details

文章分类

全部博文(48)

文章存档

2014年(1)

2013年(47)

分类: C/C++

2013-12-10 15:32:04

#include
#include
#include
#include
#include
#include
#include
#include


typedef enum __bool { false = 0, true = 1, } bool;


int main()
{
    pid_t child;
    long orig_eax, eax;
    long param[3];
    int status;
    int insyscall = 0;
    child = fork();
    if(child== 0){
        printf("===========inside child================\n");
        ptrace(PTRACE_TRACEME, 0, NULL, NULL);
        execl("/bin/ls","ls", NULL);
        printf("===========end child================\n");
    }
    else {
        printf("===========inside parent================\n");
        while(true){
            wait(&status);
            if(WIFEXITED(status))
                break;
            orig_eax = ptrace(PTRACE_PEEKUSER, child, 4*ORIG_EAX, NULL);
            if(orig_eax == SYS_write){
                if(insyscall == 0){
                    insyscall = 1;
                    param[0] = ptrace(PTRACE_PEEKUSER, child, 4*EBX, NULL);
                    param[1] = ptrace(PTRACE_PEEKUSER, child, 4*ECX, NULL);
                    param[2] = ptrace(PTRACE_PEEKUSER, child, 4*EDX, NULL);
                    printf("Write called with %ld, %ld, %ld\n", param[0], param[1], param[2]);
                } else {
                    eax = ptrace(PTRACE_PEEKUSER, child, 4*EAX, NULL);
                    printf("Write returned with %ld\n", eax);
                    insyscall = 0;
                }
            }
            ptrace(PTRACE_SYSCALL, child, NULL, NULL);
        }
        printf("===========end parent================\n");
    }
    return 0;
}

阅读(1903) | 评论(0) | 转发(0) |
0

上一篇:print-color.c

下一篇:inner.cpp

给主人留下些什么吧!~~