ShellBanner
System:Linux MiraNet 3.0.0-14-generic-pae #23-Ubuntu SMP Mon Nov 21 22:07:10 UTC 2011 i686
Software:Apache. PHP/5.3.6-13ubuntu3.10
ID:uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
Safe Mode:OFF
Open_Basedir:OFF
Freespace:25.51 GB of 70.42 GB (36.23%)
MySQL: ON MSSQL: OFF Oracle: OFF PostgreSQL: OFF Curl: OFF Sockets: ON Fetch: OFF Wget: ON Perl: ON
Disabled Functions: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,

/ usr/ src/ linux-headers-3.0.0-14/ scripts/ tracing/ - drwxr-xr-x

Directory:
Viewing file:     draw_functrace.py (3.48 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#!/usr/bin/python

"""
Copyright 2008 (c) Frederic Weisbecker <fweisbec@gmail.com>
Licensed under the terms of the GNU GPL License version 2

This script parses a trace provided by the function tracer in
kernel/trace/trace_functions.c
The resulted trace is processed into a tree to produce a more human
view of the call stack by drawing textual but hierarchical tree of
calls. Only the functions's names and the the call time are provided.

Usage:
    Be sure that you have CONFIG_FUNCTION_TRACER
    # mount -t debugfs nodev /sys/kernel/debug
    # echo function > /sys/kernel/debug/tracing/current_tracer
    $ cat /sys/kernel/debug/tracing/trace_pipe > ~/raw_trace_func
    Wait some times but not too much, the script is a bit slow.
    Break the pipe (Ctrl + Z)
    $ scripts/draw_functrace.py < raw_trace_func > draw_functrace
    Then you have your drawn trace in draw_functrace
"""


import sys, re

class CallTree:
    """ This class provides a tree representation of the functions
        call stack. If a function has no parent in the kernel (interrupt,
        syscall, kernel thread...) then it is attached to a virtual parent
        called ROOT.
    """
    ROOT = None

    def __init__(self, func, time = None, parent = None):
        self._func = func
        self._time = time
        if parent is None:
            self._parent = CallTree.ROOT
        else:
            self._parent = parent
        self._children = []

    def calls(self, func, calltime):
        """ If a function calls another one, call this method to insert it
            into the tree at the appropriate place.
            @return: A reference to the newly created child node.
        """
        child = CallTree(func, calltime, self)
        self._children.append(child)
        return child

    def getParent(self, func):
        """ Retrieve the last parent of the current node that
            has the name given by func. If this function is not
            on a parent, then create it as new child of root
            @return: A reference to the parent.
        """
        tree = self
        while tree != CallTree.ROOT and tree._func != func:
            tree = tree._parent
        if tree == CallTree.ROOT:
            child = CallTree.ROOT.calls(func, None)
            return child
        return tree

    def __repr__(self):
        return self.__toString("", True)

    def __toString(self, branch, lastChild):
        if self._time is not None:
            s = "%s----%s (%s)\n" % (branch, self._func, self._time)
        else:
            s = "%s----%s\n" % (branch, self._func)

        i = 0
        if lastChild:
            branch = branch[:-1] + " "
        while i < len(self._children):
            if i != len(self._children) - 1:
                s += "%s" % self._children[i].__toString(branch +\
                                "    |", False)
            else:
                s += "%s" % self._children[i].__toString(branch +\
                                "    |", True)
            i += 1
        return s

class BrokenLineException(Exception):
    """If the last line is not complete because of the pipe breakage,
       we want to stop the processing and ignore this line.
    """
    pass

class CommentLineException(Exception):
    """ If the line is a comment (as in the beginning of the trace file),
        just ignore it.
    """
    pass


def parseLine(line):
    line = line.strip()
    if line.startswith("#"):
        raise CommentLineException
    m = re.match("[^]]+?\\] +([0-9.]+): (\\w+) <-(\\w+)", line)
    if m is None:
        raise BrokenLineException
    return (m.group(1), m.group(2), m.group(3))


def main():
    CallTree.ROOT = CallTree("Root (Nowhere)", None, None)
    tree = CallTree.ROOT

    for line in sys.stdin:
        try:
            calltime, callee, caller = parseLine(line)
        except BrokenLineException:
            break
        except CommentLineException:
            continue
        tree = tree.getParent(caller)
        tree = tree.calls(callee, calltime)

    print CallTree.ROOT

if __name__ == "__main__":
    main()
Command:
Quick Commands:
Upload:
[Read-Only] Max size: 100MB
PHP Filesystem: <@ Ú
Search File:
regexp
Create File:
Overwrite [Read-Only]
View File:
Mass Defacement:
[+] Main Directory: [+] Defacement Url:
LmfaoX Shell - Private Build [BETA] - v0.1 -; Generated: 0.6078 seconds