Debugging plugin
git-svn-id: file:///home/svn/framework3/trunk@3776 4d416f70-5f16-0410-b530-b9f4589650daunstable
parent
21f4a10d32
commit
f8ff8c6d7b
|
@ -0,0 +1,133 @@
|
|||
module Msf
|
||||
|
||||
###
|
||||
#
|
||||
# This class illustrates a sample plugin. Plugins can change the behavior of
|
||||
# the framework by adding new features, new user interface commands, or
|
||||
# through any other arbitrary means. They are designed to have a very loose
|
||||
# definition in order to make them as useful as possible.
|
||||
#
|
||||
###
|
||||
class Plugin::ThreadTest < Msf::Plugin
|
||||
|
||||
###
|
||||
#
|
||||
# This class implements a sample console command dispatcher.
|
||||
#
|
||||
###
|
||||
class ConsoleCommandDispatcher
|
||||
include Msf::Ui::Console::CommandDispatcher
|
||||
|
||||
#
|
||||
# The dispatcher's name.
|
||||
#
|
||||
def name
|
||||
"ThreadTest"
|
||||
end
|
||||
|
||||
#
|
||||
# Returns the hash of commands supported by this dispatcher.
|
||||
#
|
||||
def commands
|
||||
{
|
||||
"start_thread" => "Start a background thread that writes to the console",
|
||||
"stop_thread" => "Start a background thread that writes to the console",
|
||||
"list_thread" => "List running threads"
|
||||
}
|
||||
end
|
||||
|
||||
def cmd_start_thread(*args)
|
||||
if (@mythread)
|
||||
print_line("Test thread is already running")
|
||||
return
|
||||
end
|
||||
|
||||
@mythread = ::Thread.new {
|
||||
while(true)
|
||||
print_line("--- test thread ---")
|
||||
select(nil, nil, nil, 5)
|
||||
end
|
||||
}
|
||||
print_line("Test thread created")
|
||||
end
|
||||
|
||||
def cmd_stop_thread(*args)
|
||||
if (! @mythread)
|
||||
print_line("No test thread is running")
|
||||
return
|
||||
end
|
||||
|
||||
@mythread.kill
|
||||
print_line("Test thread stopped")
|
||||
end
|
||||
|
||||
def cmd_list_thread(*args)
|
||||
Thread.list.each do |t|
|
||||
print_line(sprintf("Thread: 0x%.8x (%s/%d) (%s)", t.object_id, t.status, t.priority, t.tsource))
|
||||
print_line("")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
# The constructor is called when an instance of the plugin is created. The
|
||||
# framework instance that the plugin is being associated with is passed in
|
||||
# the framework parameter. Plugins should call the parent constructor when
|
||||
# inheriting from Msf::Plugin to ensure that the framework attribute on
|
||||
# their instance gets set.
|
||||
#
|
||||
def initialize(framework, opts)
|
||||
super
|
||||
|
||||
# If this plugin is being loaded in the context of a console application
|
||||
# that uses the framework's console user interface driver, register
|
||||
# console dispatcher commands.
|
||||
add_console_dispatcher(ConsoleCommandDispatcher)
|
||||
|
||||
# Extend the thread to track the calling source
|
||||
Thread.class_eval("
|
||||
attr_accessor :tsource
|
||||
|
||||
alias initialize_old initialize
|
||||
|
||||
def initialize(&block)
|
||||
self.tsource = caller(1)
|
||||
initialize_old(&block)
|
||||
end
|
||||
")
|
||||
|
||||
print_status("ThreadTest plugin loaded.")
|
||||
end
|
||||
|
||||
#
|
||||
# The cleanup routine for plugins gives them a chance to undo any actions
|
||||
# they may have done to the framework. For instance, if a console
|
||||
# dispatcher was added, then it should be removed in the cleanup routine.
|
||||
#
|
||||
def cleanup
|
||||
# If we had previously registered a console dispatcher with the console,
|
||||
# deregister it now.
|
||||
remove_console_dispatcher('ThreadTest')
|
||||
end
|
||||
|
||||
#
|
||||
# This method returns a short, friendly name for the plugin.
|
||||
#
|
||||
def name
|
||||
"threadtest"
|
||||
end
|
||||
|
||||
#
|
||||
# This method returns a brief description of the plugin. It should be no
|
||||
# more than 60 characters, but there are no hard limits.
|
||||
#
|
||||
def desc
|
||||
"Thread testing plugin"
|
||||
end
|
||||
|
||||
protected
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
Loading…
Reference in New Issue