Class/Module Index [+]

Quicksearch

Rex::Post::Meterpreter::Extensions::Stdapi::Sys::Thread

This class implements the Rex::Post::Thread interface which wrappers a logical thread for a given process.

Public Class Methods

close(client, handle) click to toggle source

Closes the thread handle.

# File lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb, line 160
def self.close(client, handle)
        request = Packet.create_request('stdapi_sys_process_thread_close')
        request.add_tlv(TLV_TYPE_THREAD_HANDLE, handle)
        client.send_request(request, nil)
        handle = nil
        return true
end
finalize(client,handle) click to toggle source
# File lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb, line 39
def self.finalize(client,handle)
        proc { self.close(client,handle) }
end
new(process, handle, tid) click to toggle source

Initialize the thread instance.

# File lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb, line 32
def initialize(process, handle, tid)
        self.process = process
        self.handle  = handle
        self.tid     = tid
        ObjectSpace.define_finalizer( self, self.class.finalize(self.process.client, self.handle) )
end

Public Instance Methods

close() click to toggle source

Instance method

# File lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb, line 169
def close
        self.class.close(self.process.client, self.handle)
end
pretty_regs() click to toggle source

Formats the registers in a pretty way.

# File lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb, line 138
def pretty_regs
        regs = query_regs

        buf  = sprintf("eax=%.8x ebx=%.8x ecx=%.8x edx=%.8x esi=%.8x edi=%.8x\n",
                       regs['eax'], regs['ebx'], regs['ecx'], regs['edx'], regs['esi'], regs['edi'])
        buf += sprintf("eip=%.8x esp=%.8x ebp=%.8x\n",
                       regs['eip'], regs['esp'], regs['ebp'])
        buf += sprintf("cs=%.4x ss=%.4x ds=%.4x es=%.4x fs=%.4x gs=%.4x\n",
                       regs['cs'], regs['ss'], regs['ds'], regs['es'], regs['fs'], regs['gs'])

        return buf
end
query_regs() click to toggle source

Queries the register state of the thread.

# File lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb, line 98
def query_regs
        request = Packet.create_request('stdapi_sys_process_thread_query_regs')
        regs    = {}

        request.add_tlv(TLV_TYPE_THREAD_HANDLE, handle)

        response = process.client.send_request(request)

        response.each(TLV_TYPE_REGISTER) { |reg|
                regs[reg.get_tlv_value(TLV_TYPE_REGISTER_NAME)] = reg.get_tlv_value(TLV_TYPE_REGISTER_VALUE_32)
        }

        return regs
end
resume() click to toggle source

Resumes the thread's execution.

# File lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb, line 65
def resume
        request = Packet.create_request('stdapi_sys_process_thread_resume')

        request.add_tlv(TLV_TYPE_THREAD_HANDLE, handle)

        process.client.send_request(request)

        return true
end
set_regs(regs_hash) click to toggle source

Sets the register state of the thread. The registers are supplied in the form of a hash.

# File lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb, line 117
def set_regs(regs_hash)
        request = Packet.create_request('stdapi_sys_process_thread_set_regs')

        request.add_tlv(TLV_TYPE_THREAD_HANDLE, handle)

        # Add all of the register that we're setting
        regs_hash.each_key { |name|
                t = request.add_tlv(TLV_TYPE_REGISTER)

                t.add_tlv(TLV_TYPE_REGISTER_NAME, name)
                t.add_tlv(TLV_TYPE_REGISTER_VALUE_32, regs_hash[name])
        }

        process.client.send_request(request)

        return true
end
suspend() click to toggle source

Suspends the thread's execution.

# File lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb, line 52
def suspend
        request = Packet.create_request('stdapi_sys_process_thread_suspend')

        request.add_tlv(TLV_TYPE_THREAD_HANDLE, handle)

        process.client.send_request(request)

        return true
end
terminate(code) click to toggle source

Terminates the thread's execution.

# File lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb, line 78
def terminate(code)
        request = Packet.create_request('stdapi_sys_process_thread_terminate')

        request.add_tlv(TLV_TYPE_THREAD_HANDLE, handle)
        request.add_tlv(TLV_TYPE_EXIT_CODE, code)

        process.client.send_request(request)

        return true
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.