librex 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +4 -0
- data/lib/rex.rb +101 -0
- data/lib/rex.rb.ts.rb +70 -0
- data/lib/rex/LICENSE +29 -0
- data/lib/rex/arch.rb +103 -0
- data/lib/rex/arch/sparc.rb +75 -0
- data/lib/rex/arch/sparc.rb.ut.rb +18 -0
- data/lib/rex/arch/x86.rb +513 -0
- data/lib/rex/arch/x86.rb.ut.rb +93 -0
- data/lib/rex/assembly/nasm.rb +100 -0
- data/lib/rex/assembly/nasm.rb.ut.rb +22 -0
- data/lib/rex/codepage.map +104 -0
- data/lib/rex/compat.rb +281 -0
- data/lib/rex/constants.rb +113 -0
- data/lib/rex/elfparsey.rb +11 -0
- data/lib/rex/elfparsey/elf.rb +123 -0
- data/lib/rex/elfparsey/elfbase.rb +260 -0
- data/lib/rex/elfparsey/exceptions.rb +27 -0
- data/lib/rex/elfscan.rb +12 -0
- data/lib/rex/elfscan/scanner.rb +207 -0
- data/lib/rex/elfscan/search.rb +46 -0
- data/lib/rex/encoder/alpha2.rb +31 -0
- data/lib/rex/encoder/alpha2/alpha_mixed.rb +68 -0
- data/lib/rex/encoder/alpha2/alpha_upper.rb +79 -0
- data/lib/rex/encoder/alpha2/generic.rb +113 -0
- data/lib/rex/encoder/alpha2/unicode_mixed.rb +117 -0
- data/lib/rex/encoder/alpha2/unicode_upper.rb +129 -0
- data/lib/rex/encoder/ndr.rb +89 -0
- data/lib/rex/encoder/ndr.rb.ut.rb +44 -0
- data/lib/rex/encoder/nonalpha.rb +61 -0
- data/lib/rex/encoder/nonupper.rb +64 -0
- data/lib/rex/encoder/xdr.rb +106 -0
- data/lib/rex/encoder/xdr.rb.ut.rb +29 -0
- data/lib/rex/encoder/xor.rb +69 -0
- data/lib/rex/encoder/xor/dword.rb +13 -0
- data/lib/rex/encoder/xor/dword_additive.rb +13 -0
- data/lib/rex/encoders/xor_dword.rb +35 -0
- data/lib/rex/encoders/xor_dword_additive.rb +53 -0
- data/lib/rex/encoders/xor_dword_additive.rb.ut.rb +12 -0
- data/lib/rex/encoding/xor.rb +20 -0
- data/lib/rex/encoding/xor.rb.ts.rb +14 -0
- data/lib/rex/encoding/xor/byte.rb +15 -0
- data/lib/rex/encoding/xor/byte.rb.ut.rb +21 -0
- data/lib/rex/encoding/xor/dword.rb +21 -0
- data/lib/rex/encoding/xor/dword.rb.ut.rb +15 -0
- data/lib/rex/encoding/xor/dword_additive.rb +92 -0
- data/lib/rex/encoding/xor/dword_additive.rb.ut.rb +15 -0
- data/lib/rex/encoding/xor/exceptions.rb +17 -0
- data/lib/rex/encoding/xor/generic.rb +146 -0
- data/lib/rex/encoding/xor/generic.rb.ut.rb +120 -0
- data/lib/rex/encoding/xor/qword.rb +15 -0
- data/lib/rex/encoding/xor/word.rb +21 -0
- data/lib/rex/encoding/xor/word.rb.ut.rb +13 -0
- data/lib/rex/exceptions.rb +275 -0
- data/lib/rex/exceptions.rb.ut.rb +44 -0
- data/lib/rex/exploitation/cmdstager.rb +133 -0
- data/lib/rex/exploitation/egghunter.rb +143 -0
- data/lib/rex/exploitation/egghunter.rb.ut.rb +25 -0
- data/lib/rex/exploitation/encryptjs.rb +77 -0
- data/lib/rex/exploitation/heaplib.js.b64 +331 -0
- data/lib/rex/exploitation/heaplib.rb +94 -0
- data/lib/rex/exploitation/javascriptosdetect.rb +735 -0
- data/lib/rex/exploitation/obfuscatejs.rb +335 -0
- data/lib/rex/exploitation/opcodedb.rb +818 -0
- data/lib/rex/exploitation/opcodedb.rb.ut.rb +279 -0
- data/lib/rex/exploitation/seh.rb +92 -0
- data/lib/rex/exploitation/seh.rb.ut.rb +19 -0
- data/lib/rex/file.rb +84 -0
- data/lib/rex/file.rb.ut.rb +16 -0
- data/lib/rex/image_source.rb +12 -0
- data/lib/rex/image_source/disk.rb +60 -0
- data/lib/rex/image_source/image_source.rb +46 -0
- data/lib/rex/image_source/memory.rb +37 -0
- data/lib/rex/io/bidirectional_pipe.rb +157 -0
- data/lib/rex/io/datagram_abstraction.rb +35 -0
- data/lib/rex/io/stream.rb +313 -0
- data/lib/rex/io/stream_abstraction.rb +186 -0
- data/lib/rex/io/stream_server.rb +211 -0
- data/lib/rex/job_container.rb +202 -0
- data/lib/rex/logging.rb +4 -0
- data/lib/rex/logging/log_dispatcher.rb +179 -0
- data/lib/rex/logging/log_sink.rb +42 -0
- data/lib/rex/logging/sinks/flatfile.rb +55 -0
- data/lib/rex/logging/sinks/stderr.rb +43 -0
- data/lib/rex/machparsey.rb +9 -0
- data/lib/rex/machparsey/exceptions.rb +34 -0
- data/lib/rex/machparsey/mach.rb +209 -0
- data/lib/rex/machparsey/machbase.rb +408 -0
- data/lib/rex/machscan.rb +9 -0
- data/lib/rex/machscan/scanner.rb +217 -0
- data/lib/rex/mime.rb +9 -0
- data/lib/rex/mime/header.rb +75 -0
- data/lib/rex/mime/message.rb +112 -0
- data/lib/rex/mime/part.rb +20 -0
- data/lib/rex/nop/opty2.rb +108 -0
- data/lib/rex/nop/opty2.rb.ut.rb +23 -0
- data/lib/rex/nop/opty2_tables.rb +300 -0
- data/lib/rex/ole.rb +128 -0
- data/lib/rex/ole/clsid.rb +47 -0
- data/lib/rex/ole/difat.rb +141 -0
- data/lib/rex/ole/directory.rb +230 -0
- data/lib/rex/ole/direntry.rb +240 -0
- data/lib/rex/ole/fat.rb +99 -0
- data/lib/rex/ole/header.rb +204 -0
- data/lib/rex/ole/minifat.rb +77 -0
- data/lib/rex/ole/samples/create_ole.rb +27 -0
- data/lib/rex/ole/samples/dir.rb +35 -0
- data/lib/rex/ole/samples/dump_stream.rb +34 -0
- data/lib/rex/ole/samples/ole_info.rb +23 -0
- data/lib/rex/ole/storage.rb +395 -0
- data/lib/rex/ole/stream.rb +53 -0
- data/lib/rex/ole/substorage.rb +49 -0
- data/lib/rex/ole/util.rb +157 -0
- data/lib/rex/parser/arguments.rb +97 -0
- data/lib/rex/parser/arguments.rb.ut.rb +67 -0
- data/lib/rex/parser/ini.rb +185 -0
- data/lib/rex/parser/ini.rb.ut.rb +29 -0
- data/lib/rex/parser/nmap_xml.rb +111 -0
- data/lib/rex/payloads.rb +1 -0
- data/lib/rex/payloads/win32.rb +2 -0
- data/lib/rex/payloads/win32/common.rb +26 -0
- data/lib/rex/payloads/win32/kernel.rb +53 -0
- data/lib/rex/payloads/win32/kernel/common.rb +54 -0
- data/lib/rex/payloads/win32/kernel/migration.rb +12 -0
- data/lib/rex/payloads/win32/kernel/recovery.rb +50 -0
- data/lib/rex/payloads/win32/kernel/stager.rb +171 -0
- data/lib/rex/peparsey.rb +12 -0
- data/lib/rex/peparsey/exceptions.rb +32 -0
- data/lib/rex/peparsey/pe.rb +188 -0
- data/lib/rex/peparsey/pe_memdump.rb +63 -0
- data/lib/rex/peparsey/pebase.rb +1655 -0
- data/lib/rex/peparsey/section.rb +136 -0
- data/lib/rex/pescan.rb +13 -0
- data/lib/rex/pescan/analyze.rb +309 -0
- data/lib/rex/pescan/scanner.rb +206 -0
- data/lib/rex/pescan/search.rb +56 -0
- data/lib/rex/platforms.rb +1 -0
- data/lib/rex/platforms/windows.rb +51 -0
- data/lib/rex/poly.rb +132 -0
- data/lib/rex/poly/block.rb +468 -0
- data/lib/rex/poly/register.rb +100 -0
- data/lib/rex/poly/register/x86.rb +40 -0
- data/lib/rex/post.rb +8 -0
- data/lib/rex/post/dir.rb +51 -0
- data/lib/rex/post/file.rb +172 -0
- data/lib/rex/post/file_stat.rb +220 -0
- data/lib/rex/post/gen.pl +13 -0
- data/lib/rex/post/io.rb +182 -0
- data/lib/rex/post/meterpreter.rb +4 -0
- data/lib/rex/post/meterpreter/channel.rb +438 -0
- data/lib/rex/post/meterpreter/channel_container.rb +54 -0
- data/lib/rex/post/meterpreter/channels/pool.rb +160 -0
- data/lib/rex/post/meterpreter/channels/pools/file.rb +62 -0
- data/lib/rex/post/meterpreter/channels/pools/stream_pool.rb +103 -0
- data/lib/rex/post/meterpreter/channels/stream.rb +87 -0
- data/lib/rex/post/meterpreter/client.rb +335 -0
- data/lib/rex/post/meterpreter/client_core.rb +274 -0
- data/lib/rex/post/meterpreter/dependencies.rb +3 -0
- data/lib/rex/post/meterpreter/extension.rb +32 -0
- data/lib/rex/post/meterpreter/extensions/espia/espia.rb +58 -0
- data/lib/rex/post/meterpreter/extensions/espia/tlv.rb +16 -0
- data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +94 -0
- data/lib/rex/post/meterpreter/extensions/incognito/tlv.rb +21 -0
- data/lib/rex/post/meterpreter/extensions/priv/fs.rb +118 -0
- data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +61 -0
- data/lib/rex/post/meterpreter/extensions/priv/priv.rb +104 -0
- data/lib/rex/post/meterpreter/extensions/priv/tlv.rb +28 -0
- data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +100 -0
- data/lib/rex/post/meterpreter/extensions/sniffer/tlv.rb +24 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +333 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +273 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +235 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +103 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +48 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +144 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +73 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +56 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb +137 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb +167 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +167 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/udp_channel.rb +192 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +139 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +97 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +184 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record.rb +41 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/power.rb +61 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +361 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +129 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +55 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +336 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +141 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +279 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +182 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +102 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +174 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +185 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +227 -0
- data/lib/rex/post/meterpreter/inbound_packet_handler.rb +30 -0
- data/lib/rex/post/meterpreter/object_aliases.rb +83 -0
- data/lib/rex/post/meterpreter/packet.rb +596 -0
- data/lib/rex/post/meterpreter/packet_dispatcher.rb +409 -0
- data/lib/rex/post/meterpreter/packet_parser.rb +94 -0
- data/lib/rex/post/meterpreter/packet_response_waiter.rb +83 -0
- data/lib/rex/post/meterpreter/ui/console.rb +135 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +62 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +595 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +108 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +241 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +61 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +98 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +51 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +132 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +187 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +63 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +376 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +270 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +484 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +315 -0
- data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +95 -0
- data/lib/rex/post/permission.rb +26 -0
- data/lib/rex/post/process.rb +57 -0
- data/lib/rex/post/thread.rb +57 -0
- data/lib/rex/post/ui.rb +52 -0
- data/lib/rex/proto.rb +12 -0
- data/lib/rex/proto.rb.ts.rb +8 -0
- data/lib/rex/proto/dcerpc.rb +6 -0
- data/lib/rex/proto/dcerpc.rb.ts.rb +9 -0
- data/lib/rex/proto/dcerpc/client.rb +358 -0
- data/lib/rex/proto/dcerpc/client.rb.ut.rb +491 -0
- data/lib/rex/proto/dcerpc/exceptions.rb +150 -0
- data/lib/rex/proto/dcerpc/handle.rb +47 -0
- data/lib/rex/proto/dcerpc/handle.rb.ut.rb +85 -0
- data/lib/rex/proto/dcerpc/ndr.rb +72 -0
- data/lib/rex/proto/dcerpc/ndr.rb.ut.rb +41 -0
- data/lib/rex/proto/dcerpc/packet.rb +253 -0
- data/lib/rex/proto/dcerpc/packet.rb.ut.rb +56 -0
- data/lib/rex/proto/dcerpc/response.rb +186 -0
- data/lib/rex/proto/dcerpc/response.rb.ut.rb +15 -0
- data/lib/rex/proto/dcerpc/uuid.rb +84 -0
- data/lib/rex/proto/dcerpc/uuid.rb.ut.rb +46 -0
- data/lib/rex/proto/drda.rb +5 -0
- data/lib/rex/proto/drda.rb.ts.rb +17 -0
- data/lib/rex/proto/drda/constants.rb +49 -0
- data/lib/rex/proto/drda/constants.rb.ut.rb +23 -0
- data/lib/rex/proto/drda/packet.rb +252 -0
- data/lib/rex/proto/drda/packet.rb.ut.rb +109 -0
- data/lib/rex/proto/drda/utils.rb +123 -0
- data/lib/rex/proto/drda/utils.rb.ut.rb +84 -0
- data/lib/rex/proto/http.rb +5 -0
- data/lib/rex/proto/http.rb.ts.rb +12 -0
- data/lib/rex/proto/http/client.rb +817 -0
- data/lib/rex/proto/http/client.rb.ut.rb +93 -0
- data/lib/rex/proto/http/handler.rb +46 -0
- data/lib/rex/proto/http/handler/erb.rb +128 -0
- data/lib/rex/proto/http/handler/erb.rb.ut.rb +21 -0
- data/lib/rex/proto/http/handler/erb.rb.ut.rb.rhtml +1 -0
- data/lib/rex/proto/http/handler/proc.rb +54 -0
- data/lib/rex/proto/http/handler/proc.rb.ut.rb +24 -0
- data/lib/rex/proto/http/header.rb +161 -0
- data/lib/rex/proto/http/header.rb.ut.rb +46 -0
- data/lib/rex/proto/http/packet.rb +394 -0
- data/lib/rex/proto/http/packet.rb.ut.rb +165 -0
- data/lib/rex/proto/http/request.rb +356 -0
- data/lib/rex/proto/http/request.rb.ut.rb +214 -0
- data/lib/rex/proto/http/response.rb +85 -0
- data/lib/rex/proto/http/response.rb.ut.rb +149 -0
- data/lib/rex/proto/http/server.rb +367 -0
- data/lib/rex/proto/http/server.rb.ut.rb +79 -0
- data/lib/rex/proto/smb.rb +7 -0
- data/lib/rex/proto/smb.rb.ts.rb +8 -0
- data/lib/rex/proto/smb/client.rb +1733 -0
- data/lib/rex/proto/smb/client.rb.ut.rb +223 -0
- data/lib/rex/proto/smb/constants.rb +1062 -0
- data/lib/rex/proto/smb/constants.rb.ut.rb +18 -0
- data/lib/rex/proto/smb/crypt.rb +95 -0
- data/lib/rex/proto/smb/crypt.rb.ut.rb +20 -0
- data/lib/rex/proto/smb/evasions.rb +65 -0
- data/lib/rex/proto/smb/exceptions.rb +846 -0
- data/lib/rex/proto/smb/simpleclient.rb +292 -0
- data/lib/rex/proto/smb/simpleclient.rb.ut.rb +128 -0
- data/lib/rex/proto/smb/utils.rb +514 -0
- data/lib/rex/proto/smb/utils.rb.ut.rb +20 -0
- data/lib/rex/proto/sunrpc.rb +1 -0
- data/lib/rex/proto/sunrpc/client.rb +195 -0
- data/lib/rex/script.rb +42 -0
- data/lib/rex/script/base.rb +59 -0
- data/lib/rex/script/meterpreter.rb +9 -0
- data/lib/rex/script/shell.rb +9 -0
- data/lib/rex/service.rb +48 -0
- data/lib/rex/service_manager.rb +141 -0
- data/lib/rex/service_manager.rb.ut.rb +32 -0
- data/lib/rex/services/local_relay.rb +423 -0
- data/lib/rex/socket.rb +586 -0
- data/lib/rex/socket.rb.ut.rb +86 -0
- data/lib/rex/socket/comm.rb +119 -0
- data/lib/rex/socket/comm/local.rb +409 -0
- data/lib/rex/socket/comm/local.rb.ut.rb +75 -0
- data/lib/rex/socket/ip.rb +129 -0
- data/lib/rex/socket/parameters.rb +345 -0
- data/lib/rex/socket/parameters.rb.ut.rb +51 -0
- data/lib/rex/socket/range_walker.rb +295 -0
- data/lib/rex/socket/range_walker.rb.ut.rb +55 -0
- data/lib/rex/socket/ssl_tcp.rb +184 -0
- data/lib/rex/socket/ssl_tcp.rb.ut.rb +39 -0
- data/lib/rex/socket/ssl_tcp_server.rb +122 -0
- data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +51 -0
- data/lib/rex/socket/subnet_walker.rb +75 -0
- data/lib/rex/socket/subnet_walker.rb.ut.rb +28 -0
- data/lib/rex/socket/switch_board.rb +272 -0
- data/lib/rex/socket/switch_board.rb.ut.rb +52 -0
- data/lib/rex/socket/tcp.rb +76 -0
- data/lib/rex/socket/tcp.rb.ut.rb +64 -0
- data/lib/rex/socket/tcp_server.rb +67 -0
- data/lib/rex/socket/tcp_server.rb.ut.rb +44 -0
- data/lib/rex/socket/udp.rb +157 -0
- data/lib/rex/socket/udp.rb.ut.rb +44 -0
- data/lib/rex/struct2.rb +5 -0
- data/lib/rex/struct2/c_struct.rb +181 -0
- data/lib/rex/struct2/c_struct_template.rb +39 -0
- data/lib/rex/struct2/constant.rb +26 -0
- data/lib/rex/struct2/element.rb +44 -0
- data/lib/rex/struct2/generic.rb +73 -0
- data/lib/rex/struct2/restraint.rb +54 -0
- data/lib/rex/struct2/s_string.rb +72 -0
- data/lib/rex/struct2/s_struct.rb +111 -0
- data/lib/rex/sync.rb +6 -0
- data/lib/rex/sync/event.rb +94 -0
- data/lib/rex/sync/read_write_lock.rb +176 -0
- data/lib/rex/sync/ref.rb +57 -0
- data/lib/rex/sync/thread_safe.rb +82 -0
- data/lib/rex/test.rb +35 -0
- data/lib/rex/text.rb +1029 -0
- data/lib/rex/text.rb.ut.rb +168 -0
- data/lib/rex/time.rb +65 -0
- data/lib/rex/transformer.rb +115 -0
- data/lib/rex/transformer.rb.ut.rb +38 -0
- data/lib/rex/ui.rb +21 -0
- data/lib/rex/ui/interactive.rb +252 -0
- data/lib/rex/ui/output.rb +80 -0
- data/lib/rex/ui/output/none.rb +18 -0
- data/lib/rex/ui/progress_tracker.rb +96 -0
- data/lib/rex/ui/subscriber.rb +149 -0
- data/lib/rex/ui/text/color.rb +97 -0
- data/lib/rex/ui/text/color.rb.ut.rb +18 -0
- data/lib/rex/ui/text/dispatcher_shell.rb +382 -0
- data/lib/rex/ui/text/input.rb +117 -0
- data/lib/rex/ui/text/input/buffer.rb +75 -0
- data/lib/rex/ui/text/input/readline.rb +129 -0
- data/lib/rex/ui/text/input/socket.rb +95 -0
- data/lib/rex/ui/text/input/stdio.rb +45 -0
- data/lib/rex/ui/text/irb_shell.rb +55 -0
- data/lib/rex/ui/text/output.rb +80 -0
- data/lib/rex/ui/text/output/buffer.rb +65 -0
- data/lib/rex/ui/text/output/file.rb +37 -0
- data/lib/rex/ui/text/output/socket.rb +43 -0
- data/lib/rex/ui/text/output/stdio.rb +40 -0
- data/lib/rex/ui/text/progress_tracker.rb +56 -0
- data/lib/rex/ui/text/progress_tracker.rb.ut.rb +34 -0
- data/lib/rex/ui/text/shell.rb +321 -0
- data/lib/rex/ui/text/table.rb +254 -0
- data/lib/rex/ui/text/table.rb.ut.rb +55 -0
- data/lib/rex/zip.rb +93 -0
- data/lib/rex/zip/archive.rb +91 -0
- data/lib/rex/zip/blocks.rb +182 -0
- data/lib/rex/zip/entry.rb +95 -0
- data/lib/rex/zip/samples/comment.rb +32 -0
- data/lib/rex/zip/samples/mkwar.rb +138 -0
- data/lib/rex/zip/samples/mkzip.rb +19 -0
- data/lib/rex/zip/samples/recursive.rb +58 -0
- metadata +435 -0
data/lib/rex/logging.rb
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
require 'rex/sync'
|
|
2
|
+
require 'rex/logging/log_sink'
|
|
3
|
+
|
|
4
|
+
module Rex
|
|
5
|
+
module Logging
|
|
6
|
+
|
|
7
|
+
###
|
|
8
|
+
#
|
|
9
|
+
# The log dispatcher associates log sources with log sinks. A log source
|
|
10
|
+
# is a unique identity that is associated with one and only one log sink.
|
|
11
|
+
# For instance, the framework-core registers the 'core'
|
|
12
|
+
#
|
|
13
|
+
###
|
|
14
|
+
class LogDispatcher
|
|
15
|
+
|
|
16
|
+
#
|
|
17
|
+
# Creates the global log dispatcher instance and initializes it for use.
|
|
18
|
+
#
|
|
19
|
+
def initialize()
|
|
20
|
+
self.log_sinks = {}
|
|
21
|
+
self.log_levels = {}
|
|
22
|
+
self.log_sinks_lock = Mutex.new
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
#
|
|
26
|
+
# Returns the sink that is associated with the supplied source.
|
|
27
|
+
#
|
|
28
|
+
def [](src)
|
|
29
|
+
sink = nil
|
|
30
|
+
|
|
31
|
+
log_sinks_lock.synchronize {
|
|
32
|
+
sink = log_sinks[src]
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return sink
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
#
|
|
39
|
+
# Calls the source association routie.
|
|
40
|
+
#
|
|
41
|
+
def []=(src, sink)
|
|
42
|
+
store(src, sink)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
#
|
|
46
|
+
# Associates the supplied source with the supplied sink. If a log level
|
|
47
|
+
# has already been defined for the source, the level argument is ignored.
|
|
48
|
+
# Use set_log_level to alter it.
|
|
49
|
+
#
|
|
50
|
+
def store(src, sink, level = 0)
|
|
51
|
+
log_sinks_lock.synchronize {
|
|
52
|
+
if (log_sinks[src] == nil)
|
|
53
|
+
log_sinks[src] = sink
|
|
54
|
+
|
|
55
|
+
set_log_level(src, level) if (log_levels[src] == nil)
|
|
56
|
+
else
|
|
57
|
+
raise(
|
|
58
|
+
RuntimeError,
|
|
59
|
+
"The supplied log source #{src} is already registered.",
|
|
60
|
+
caller)
|
|
61
|
+
end
|
|
62
|
+
}
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
#
|
|
66
|
+
# Removes a source association if one exists.
|
|
67
|
+
#
|
|
68
|
+
def delete(src)
|
|
69
|
+
sink = nil
|
|
70
|
+
|
|
71
|
+
log_sinks_lock.synchronize {
|
|
72
|
+
sink = log_sinks[src]
|
|
73
|
+
|
|
74
|
+
log_sinks.delete(src)
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
if (sink)
|
|
78
|
+
sink.cleanup
|
|
79
|
+
|
|
80
|
+
return true
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
return false
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
#
|
|
87
|
+
# Performs the actual log operation against the supplied source
|
|
88
|
+
#
|
|
89
|
+
def log(sev, src, level, msg, from)
|
|
90
|
+
log_sinks_lock.synchronize {
|
|
91
|
+
if ((sink = log_sinks[src]))
|
|
92
|
+
next if (log_levels[src] and level > log_levels[src])
|
|
93
|
+
|
|
94
|
+
sink.log(sev, src, level, msg, from)
|
|
95
|
+
end
|
|
96
|
+
}
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
#
|
|
100
|
+
# This method sets the log level threshold for a given source.
|
|
101
|
+
#
|
|
102
|
+
def set_level(src, level)
|
|
103
|
+
log_levels[src] = level.to_i
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
#
|
|
107
|
+
# This method returns the log level threshold of a given source.
|
|
108
|
+
#
|
|
109
|
+
def get_level(src)
|
|
110
|
+
log_levels[src]
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
attr_accessor :log_sinks, :log_sinks_lock # :nodoc:
|
|
114
|
+
attr_accessor :log_levels # :nodoc:
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
###
|
|
121
|
+
#
|
|
122
|
+
# An instance of the log dispatcher exists in the global namespace, along
|
|
123
|
+
# with stubs for many of the common logging methods. Various sources can
|
|
124
|
+
# register themselves as a log sink such that logs can be directed at
|
|
125
|
+
# various targets depending on where they're sourced from. By doing it
|
|
126
|
+
# this way, things like sessions can use the global logging stubs and
|
|
127
|
+
# still be directed at the correct log file.
|
|
128
|
+
#
|
|
129
|
+
###
|
|
130
|
+
ExceptionCallStack = "__EXCEPTCALLSTACK__"
|
|
131
|
+
|
|
132
|
+
def dlog(msg, src = 'core', level = 0, from = caller)
|
|
133
|
+
$dispatcher.log(LOG_DEBUG, src, level, msg, from)
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def elog(msg, src = 'core', level = 0, from = caller)
|
|
137
|
+
$dispatcher.log(LOG_ERROR, src, level, msg, from)
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def wlog(msg, src = 'core', level = 0, from = caller)
|
|
141
|
+
$dispatcher.log(LOG_WARN, src, level, msg, from)
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def ilog(msg, src = 'core', level = 0, from = caller)
|
|
145
|
+
$dispatcher.log(LOG_INFO, src, level, msg, from)
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def rlog(msg, src = 'core', level = 0, from = caller)
|
|
149
|
+
if (msg == ExceptionCallStack)
|
|
150
|
+
msg = "\nCall stack:\n" + $@.join("\n") + "\n"
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
$dispatcher.log(LOG_RAW, src, level, msg, from)
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def log_source_registered?(src)
|
|
157
|
+
($dispatcher[src] != nil)
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def register_log_source(src, sink, level = nil)
|
|
161
|
+
$dispatcher[src] = sink
|
|
162
|
+
|
|
163
|
+
set_log_level(src, level) if (level)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def deregister_log_source(src)
|
|
167
|
+
$dispatcher.delete(src)
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def set_log_level(src, level)
|
|
171
|
+
$dispatcher.set_level(src, level)
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def get_log_level(src)
|
|
175
|
+
$dispatcher.get_level(src)
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
# Creates the global log dispatcher
|
|
179
|
+
$dispatcher = Rex::Logging::LogDispatcher.new
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
require 'rex/constants'
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
module Logging
|
|
5
|
+
|
|
6
|
+
###
|
|
7
|
+
#
|
|
8
|
+
# This abstract interface is what must be implemented by any class
|
|
9
|
+
# that would like to register as a log sink on a given LogDispatcher
|
|
10
|
+
# instance, such as the Framework object.
|
|
11
|
+
#
|
|
12
|
+
###
|
|
13
|
+
module LogSink
|
|
14
|
+
|
|
15
|
+
def cleanup
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
#
|
|
19
|
+
# This method must be implemented by any derived log sink classes and is
|
|
20
|
+
# intended to take the supplied parameters and persist them to an arbitrary
|
|
21
|
+
# medium.
|
|
22
|
+
#
|
|
23
|
+
def log(sev, src, level, msg, from)
|
|
24
|
+
raise NotImplementedError
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
protected
|
|
28
|
+
|
|
29
|
+
#
|
|
30
|
+
# This method returns the current timestamp in MM/DD/YYYY HH:Mi:SS format.
|
|
31
|
+
#
|
|
32
|
+
def get_current_timestamp
|
|
33
|
+
return Time.now.strftime("%m/%d/%Y %H:%M:%S")
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
require 'rex/logging/sinks/flatfile'
|
|
42
|
+
require 'rex/logging/sinks/stderr'
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
module Rex
|
|
2
|
+
module Logging
|
|
3
|
+
module Sinks
|
|
4
|
+
|
|
5
|
+
###
|
|
6
|
+
#
|
|
7
|
+
# This class implements the LogSink interface and backs it against a
|
|
8
|
+
# file on disk.
|
|
9
|
+
#
|
|
10
|
+
###
|
|
11
|
+
class Flatfile
|
|
12
|
+
|
|
13
|
+
include Rex::Logging::LogSink
|
|
14
|
+
|
|
15
|
+
#
|
|
16
|
+
# Creates a flatfile log sink instance that will be configured to log to
|
|
17
|
+
# the supplied file path.
|
|
18
|
+
#
|
|
19
|
+
def initialize(file)
|
|
20
|
+
self.fd = File.new(file, "a")
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def cleanup # :nodoc:
|
|
24
|
+
fd.close
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def log(sev, src, level, msg, from) # :nodoc:
|
|
28
|
+
if (sev == LOG_RAW)
|
|
29
|
+
fd.write(msg)
|
|
30
|
+
else
|
|
31
|
+
code = 'i'
|
|
32
|
+
|
|
33
|
+
case sev
|
|
34
|
+
when LOG_DEBUG
|
|
35
|
+
code = 'd'
|
|
36
|
+
when LOG_ERROR
|
|
37
|
+
code = 'e'
|
|
38
|
+
when LOG_INFO
|
|
39
|
+
code = 'i'
|
|
40
|
+
when LOG_WARN
|
|
41
|
+
code = 'w'
|
|
42
|
+
end
|
|
43
|
+
fd.write("[#{get_current_timestamp}] [#{code}(#{level})] #{src}: #{msg}\n")
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
fd.flush
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
protected
|
|
50
|
+
|
|
51
|
+
attr_accessor :fd # :nodoc:
|
|
52
|
+
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
end end end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module Rex
|
|
2
|
+
module Logging
|
|
3
|
+
module Sinks
|
|
4
|
+
|
|
5
|
+
###
|
|
6
|
+
#
|
|
7
|
+
# This class implements the LogSink interface and backs it against stderr
|
|
8
|
+
###
|
|
9
|
+
class Stderr
|
|
10
|
+
|
|
11
|
+
include Rex::Logging::LogSink
|
|
12
|
+
|
|
13
|
+
#
|
|
14
|
+
# Writes log data to stderr
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
def log(sev, src, level, msg, from) # :nodoc:
|
|
18
|
+
if (sev == LOG_RAW)
|
|
19
|
+
$stderr.write(msg)
|
|
20
|
+
else
|
|
21
|
+
code = 'i'
|
|
22
|
+
|
|
23
|
+
case sev
|
|
24
|
+
when LOG_DEBUG
|
|
25
|
+
code = 'd'
|
|
26
|
+
when LOG_ERROR
|
|
27
|
+
code = 'e'
|
|
28
|
+
when LOG_INFO
|
|
29
|
+
code = 'i'
|
|
30
|
+
when LOG_WARN
|
|
31
|
+
code = 'w'
|
|
32
|
+
end
|
|
33
|
+
$stderr.write("[#{get_current_timestamp}] [#{code}(#{level})] #{src}: #{msg}\n")
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
$stderr.flush
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
protected
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end end end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
module MachParsey
|
|
5
|
+
|
|
6
|
+
class MachError < ::RuntimeError
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
class MachParseError < MachError
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
class MachHeaderError < MachParseError
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
class ProgramHeaderError < MachParseError
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
class BoundsError < MachError
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
#class WtfError < MachError
|
|
22
|
+
#end
|
|
23
|
+
|
|
24
|
+
class FatError < ::RuntimeError
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
class FatParseError < FatError
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
class FatHeaderError < FatParseError
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'rex/machparsey/machbase'
|
|
4
|
+
require 'rex/machparsey/exceptions'
|
|
5
|
+
require 'rex/image_source'
|
|
6
|
+
|
|
7
|
+
module Rex
|
|
8
|
+
module MachParsey
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class Mach < MachBase
|
|
12
|
+
attr_accessor :mach_header, :segments, :isource, :bits, :endian, :arch, :fat_offset
|
|
13
|
+
|
|
14
|
+
def initialize(isource, offset = 0, fat = false)
|
|
15
|
+
_parse_mach_header(isource, offset)
|
|
16
|
+
if fat == true
|
|
17
|
+
self.fat_offset = offset
|
|
18
|
+
else
|
|
19
|
+
self.fat_offset = 0
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
self.isource = isource
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def _parse_mach_header(isource, offset)
|
|
26
|
+
self.mach_header = MachHeader.new(isource.read(offset, MACH_HEADER_SIZE_64))
|
|
27
|
+
bits = mach_header.bits
|
|
28
|
+
endian = mach_header.endian
|
|
29
|
+
ncmds = mach_header.ncmds
|
|
30
|
+
|
|
31
|
+
if bits == BITS_32
|
|
32
|
+
offset += MACH_HEADER_SIZE
|
|
33
|
+
else
|
|
34
|
+
offset += MACH_HEADER_SIZE_64
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
segments = []
|
|
39
|
+
ncmds.times do
|
|
40
|
+
load_command = LoadCommand.new(isource.read(offset, LOAD_COMMAND_SIZE), endian)
|
|
41
|
+
|
|
42
|
+
case load_command.cmd
|
|
43
|
+
when LC_SEGMENT
|
|
44
|
+
segments << Segment.new(isource.read(offset, SEGMENT_COMMAND_SIZE), bits, endian)
|
|
45
|
+
when LC_SEGMENT_64
|
|
46
|
+
segments << Segment.new(isource.read(offset, SEGMENT_COMMAND_SIZE_64), bits, endian)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
offset += load_command.cmdsize
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
self.mach_header = mach_header
|
|
53
|
+
self.segments = segments
|
|
54
|
+
self.isource = isource
|
|
55
|
+
self.bits = bits
|
|
56
|
+
self.endian = endian
|
|
57
|
+
|
|
58
|
+
return segments
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def self.new_from_file(filename, disk_backed = false)
|
|
62
|
+
|
|
63
|
+
file = ::File.open(filename, "rb")
|
|
64
|
+
|
|
65
|
+
if disk_backed
|
|
66
|
+
return self.new(ImageSource::Disk.new(file))
|
|
67
|
+
else
|
|
68
|
+
obj = new_from_string(file.read)
|
|
69
|
+
file.close
|
|
70
|
+
return obj
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def self.new_from_string(data)
|
|
75
|
+
return self.new(ImageSource::Memory.new(data))
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def ptr_64?
|
|
79
|
+
mach_header.bits == BITS_64
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def ptr_32?
|
|
83
|
+
ptr_64? == false
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def ptr_s(vaddr)
|
|
87
|
+
(ptr_32?) ? ("0x%.8x" % vaddr) : ("0x%.16x" % vaddr)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def read(offset, len)
|
|
91
|
+
isource.read(offset, len)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def index(*args)
|
|
95
|
+
isource.index(*args)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def close
|
|
99
|
+
isource.close
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
class Fat < FatBase
|
|
105
|
+
attr_accessor :fat_header, :fat_archs, :machos, :isource
|
|
106
|
+
|
|
107
|
+
def initialize(isource, offset = 0)
|
|
108
|
+
self.fat_archs = []
|
|
109
|
+
self.machos = []
|
|
110
|
+
self.isource = isource
|
|
111
|
+
self.fat_header = FatHeader.new(isource.read(offset, FAT_HEADER_SIZE))
|
|
112
|
+
|
|
113
|
+
if !self.fat_header
|
|
114
|
+
raise FatHeaderError, "Could not parse FAT header"
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
print "Detected " + self.fat_header.nfat_arch.to_s + " archs in binary.\n"
|
|
118
|
+
|
|
119
|
+
offset += FAT_HEADER_SIZE
|
|
120
|
+
|
|
121
|
+
self.fat_header.nfat_arch.times do
|
|
122
|
+
fat_arch = FatArch.new(isource.read(offset, FAT_ARCH_SIZE), self.fat_header.endian)
|
|
123
|
+
self.fat_archs << fat_arch
|
|
124
|
+
self.machos << Mach.new(isource, fat_arch.offset, true)
|
|
125
|
+
offset += FAT_ARCH_SIZE
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
#this is useful for debugging but we don't use it for anything.
|
|
132
|
+
def _parse_fat_header(isource, offset)
|
|
133
|
+
archs = []
|
|
134
|
+
nfat_arch = self.fat_header.nfat_arch
|
|
135
|
+
|
|
136
|
+
print "Number of archs in binary: " + nfat_arch.to_s + "\n"
|
|
137
|
+
|
|
138
|
+
nfat_arch.times do
|
|
139
|
+
arch = FatArch.new(isource.read(offset, FAT_ARCH_SIZE), self.endian)
|
|
140
|
+
|
|
141
|
+
case arch.cpu_type
|
|
142
|
+
|
|
143
|
+
when CPU_TYPE_I386
|
|
144
|
+
print "i386\n"
|
|
145
|
+
|
|
146
|
+
when CPU_TYPE_X86_64
|
|
147
|
+
print "x86_64\n"
|
|
148
|
+
|
|
149
|
+
when CPU_TYPE_ARM
|
|
150
|
+
print "Arm\n"
|
|
151
|
+
|
|
152
|
+
when CPU_TYPE_POWERPC
|
|
153
|
+
print "Power PC\n"
|
|
154
|
+
|
|
155
|
+
when CPU_TYPE_POWERPC64
|
|
156
|
+
print "Power PC 64\n"
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
offset += FAT_ARCH_SIZE
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def self.new_from_file(filename, disk_backed = false)
|
|
164
|
+
|
|
165
|
+
file = ::File.open(filename, "rb")
|
|
166
|
+
|
|
167
|
+
if disk_backed
|
|
168
|
+
return self.new(ImageSource::Disk.new(file))
|
|
169
|
+
else
|
|
170
|
+
obj = new_from_string(file.read)
|
|
171
|
+
file.close
|
|
172
|
+
return obj
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
def self.new_from_string(data)
|
|
178
|
+
return self.new(ImageSource::Memory.new(data))
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
def ptr_64?
|
|
182
|
+
mach_header.bits == BITS_64
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def ptr_32?
|
|
186
|
+
ptr_64? == false
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
def ptr_s(vaddr)
|
|
190
|
+
(ptr_32?) ? ("0x%.8x" % vaddr) : ("0x%.16x" % vaddr)
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def read(offset, len)
|
|
194
|
+
isource.read(offset, len)
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def index(*args)
|
|
198
|
+
isource.index(*args)
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
def close
|
|
202
|
+
isource.close
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
end
|
|
209
|
+
end
|