metasploit-framework/lib/rex/ui/text/irb_shell.rb

63 lines
1.1 KiB
Ruby

# -*- coding: binary -*-
module Rex
module Ui
module Text
###
#
# This class wraps the creation of an IRB shell.
#
###
class IrbShell
@@IrbInitialized = false
def initialize(binding)
@binding_ctx = binding
end
#
# Runs the IRB shell until completion. The binding parameter initializes
# IRB to the appropriate binding context.
#
def run
# Initialize IRB by setting up its internal configuration hash and
# stuff.
if (@@IrbInitialized == false)
load('irb.rb')
IRB.setup(nil)
IRB.conf[:PROMPT_MODE] = :SIMPLE
@@IrbInitialized = true
end
# Create a new IRB instance
irb = IRB::Irb.new(IRB::WorkSpace.new(@binding_ctx))
# Set the primary irb context so that exit and other intrinsic
# commands will work.
IRB.conf[:MAIN_CONTEXT] = irb.context
# Trap interrupt
old_sigint = trap("SIGINT") do
begin
irb.signal_handle
rescue RubyLex::TerminateLineInput
irb.eval_input
end
end
# Keep processing input until the cows come home...
catch(:IRB_EXIT) do
irb.eval_input
end
trap("SIGINT", old_sigint)
end
end
end
end
end