ragweed 0.2.0-java

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.
Files changed (54) hide show
  1. data/History.txt +32 -0
  2. data/README.rdoc +60 -0
  3. data/README.txt +9 -0
  4. data/Rakefile +86 -0
  5. data/VERSION +1 -0
  6. data/examples/hittracertux.rb +45 -0
  7. data/examples/hittracerx.rb +63 -0
  8. data/examples/hook_notepad.rb +9 -0
  9. data/examples/snicker.rb +183 -0
  10. data/examples/tux-example.rb +24 -0
  11. data/lib/ragweed/arena.rb +55 -0
  12. data/lib/ragweed/blocks.rb +128 -0
  13. data/lib/ragweed/debugger32.rb +400 -0
  14. data/lib/ragweed/debuggerosx.rb +456 -0
  15. data/lib/ragweed/debuggertux.rb +502 -0
  16. data/lib/ragweed/detour.rb +223 -0
  17. data/lib/ragweed/ptr.rb +48 -0
  18. data/lib/ragweed/rasm/bblock.rb +73 -0
  19. data/lib/ragweed/rasm/isa.rb +1115 -0
  20. data/lib/ragweed/rasm.rb +59 -0
  21. data/lib/ragweed/sbuf.rb +197 -0
  22. data/lib/ragweed/trampoline.rb +103 -0
  23. data/lib/ragweed/utils.rb +182 -0
  24. data/lib/ragweed/wrap32/debugging.rb +401 -0
  25. data/lib/ragweed/wrap32/device.rb +49 -0
  26. data/lib/ragweed/wrap32/event.rb +50 -0
  27. data/lib/ragweed/wrap32/hooks.rb +39 -0
  28. data/lib/ragweed/wrap32/overlapped.rb +46 -0
  29. data/lib/ragweed/wrap32/process.rb +613 -0
  30. data/lib/ragweed/wrap32/process_token.rb +75 -0
  31. data/lib/ragweed/wrap32/thread_context.rb +142 -0
  32. data/lib/ragweed/wrap32/winx.rb +16 -0
  33. data/lib/ragweed/wrap32/wrap32.rb +583 -0
  34. data/lib/ragweed/wrap32.rb +59 -0
  35. data/lib/ragweed/wraposx/constants.rb +114 -0
  36. data/lib/ragweed/wraposx/kernelerrorx.rb +147 -0
  37. data/lib/ragweed/wraposx/region_info.rb +275 -0
  38. data/lib/ragweed/wraposx/structs.rb +102 -0
  39. data/lib/ragweed/wraposx/thread_context.rb +902 -0
  40. data/lib/ragweed/wraposx/thread_info.rb +160 -0
  41. data/lib/ragweed/wraposx/thread_info.rb.old +121 -0
  42. data/lib/ragweed/wraposx/wraposx.rb +356 -0
  43. data/lib/ragweed/wraposx.rb +60 -0
  44. data/lib/ragweed/wraptux/constants.rb +101 -0
  45. data/lib/ragweed/wraptux/process.rb +35 -0
  46. data/lib/ragweed/wraptux/threads.rb +7 -0
  47. data/lib/ragweed/wraptux/wraptux.rb +72 -0
  48. data/lib/ragweed/wraptux.rb +57 -0
  49. data/lib/ragweed.rb +112 -0
  50. data/ragweed.gemspec +102 -0
  51. data/spec/ragweed_spec.rb +7 -0
  52. data/spec/spec_helper.rb +16 -0
  53. data/test/test_ragweed.rb +0 -0
  54. metadata +121 -0
@@ -0,0 +1,101 @@
1
+ NULL = nil
2
+ module Ragweed; end
3
+ module Ragweed::Wraptux;end
4
+
5
+ module Ragweed::Wraptux::Ptrace
6
+ TRACE_ME = 0
7
+ PEEK_TEXT = 1
8
+ PEEK_DATA = 2
9
+ PEEK_USER = 3
10
+ POKE_TEXT = 4
11
+ POKE_DATA = 5
12
+ POKE_USER = 6
13
+ CONTINUE = 7
14
+ KILL = 8
15
+ STEP = 9
16
+ GETREGS = 12
17
+ SETREGS = 13
18
+ ATTACH = 16
19
+ DETACH = 17
20
+ SYSCALL = 24
21
+ SETOPTIONS = 0x4200
22
+ GETEVENTMSG = 0x4201
23
+ GETSIGINFO = 0x4202
24
+ SETSIGINFO = 0x4203
25
+ end
26
+
27
+ module Ragweed::Wraptux::Ptrace::SetOptions
28
+ TRACESYSGOOD = 0x00000001
29
+ TRACEFORK = 0x00000002
30
+ TRACEVFORK = 0x00000004
31
+ TRACECLONE = 0x00000008
32
+ TRACEEXEC = 0x00000010
33
+ TRACEVFORKDONE = 0x00000020
34
+ TRACEEXIT = 0x00000040
35
+ MASK = 0x0000007f
36
+ end
37
+
38
+ module Ragweed::Wraptux::Ptrace::EventCodes
39
+ FORK = 1
40
+ VFORK = 2
41
+ CLONE = 3
42
+ EXEC = 4
43
+ VFORK_DONE = 5
44
+ EXIT = 6
45
+ end
46
+
47
+ module Ragweed::Wraptux::Signal
48
+ SIGHUP = 1
49
+ SIGINT = 2
50
+ SIGQUIT = 3
51
+ SIGILL = 4
52
+ SIGTRAP = 5
53
+ SIGABRT = 6
54
+ SIGIOT = 6
55
+ SIGBUS = 7
56
+ SIGFPE = 8
57
+ SIGKILL = 9
58
+ SIGUSR1 = 10
59
+ SIGSEGV = 11
60
+ SIGUSR2 = 12
61
+ SIGPIPE = 13
62
+ SIGALRM = 14
63
+ SIGTERM = 15
64
+ SIGSTKFLT = 16
65
+ SIGCHLD = 17
66
+ SIGCONT = 18
67
+ SIGSTOP = 19
68
+ SIGTSTP = 20
69
+ SIGTTIN = 21
70
+ SIGTTOU = 22
71
+ SIGURG = 23
72
+ SIGXCPU = 24
73
+ SIGXFSZ = 25
74
+ SIGVTALRM = 26
75
+ SIGPROF = 27
76
+ SIGWINCH = 28
77
+ SIGIO = 29
78
+ SIGPOLL = SIGIO
79
+ #SIGLOST = 29
80
+ SIGPWR = 30
81
+ SIGSYS = 31
82
+ SIGUNUSED = 31
83
+ end
84
+
85
+ module Ragweed::Wraptux::Wait
86
+ NOHANG = 1
87
+ UNTRACED = 2
88
+ EXITED = 4
89
+ STOPPED = 8
90
+ CONTINUED = 10
91
+ NOWWAIT = 20
92
+ end
93
+
94
+ module Ragweed::Wraptux::PagePermissions
95
+ PROT_NONE = 0x0
96
+ PROT_READ = 0x1
97
+ PROT_WRITE = 0x2
98
+ PROT_EXEC = 0x4
99
+ PROT_GROWSDOWN = 0x01000000
100
+ PROT_GROWSUP = 0x02000000
101
+ end
@@ -0,0 +1,35 @@
1
+ class Ragweed::Process
2
+
3
+ include Ragweed
4
+ attr_reader :pid
5
+
6
+ def initialize(pid); @pid = pid; end
7
+
8
+ ## Read/write ranges of data or fixnums to/from the process by address.
9
+ def read(off, sz=4096)
10
+ a = []
11
+ while off < off+sz
12
+ a.push(Ragweed::Wraptux::ptrace(Ragweed::Wraptux::Ptrace::PEEK_TEXT, @pid, off, 0))
13
+ return a.pack('L*') if a.last == -1 and FFI.errno != 0
14
+ off+=4
15
+ end
16
+ a.pack('L*')
17
+ end
18
+
19
+ ## ptrace sucks, writing 8 or 16 bytes will probably
20
+ ## result in failure unless you PTRACE_POKE first and
21
+ ## get the rest of the original value at the address
22
+ def write(off, data)
23
+ while off < data.size
24
+ Ragweed::Wraptux::ptrace(Ragweed::Wraptux::Ptrace::POKE_TEXT, @pid, off, data[off,4].unpack('L').first)
25
+ off += 4
26
+ end
27
+ end
28
+
29
+ def read32(off); read(off, 4).unpack("L").first; end
30
+ def read16(off); read(off, 2).unpack("v").first; end
31
+ def read8(off); read(off, 1)[0]; end
32
+ def write32(off, v); write(off, [v].pack("L")); end
33
+ def write16(off, v); write(off, [v].pack("v")); end
34
+ def write8(off, v); write(off, v.chr); end
35
+ end
@@ -0,0 +1,7 @@
1
+ ## New 'ThreadInfo' sub module
2
+ ## so Wraptux matches the API
3
+ module Ragweed; end
4
+ module Ragweed::Wraptux; end
5
+
6
+ module Ragweed::Wraptux::ThreadInfo
7
+ end
@@ -0,0 +1,72 @@
1
+ require 'ffi'
2
+
3
+ module Ragweed::Wraptux
4
+ module Libc
5
+ extend FFI::Library
6
+ ffi_lib FFI::Library::LIBC
7
+ attach_function 'ptrace', [ :ulong, :pid_t, :ulong, :ulong ], :long
8
+ attach_function 'wait', [ :pointer ], :int
9
+ attach_function 'waitpid', [ :int, :pointer, :int ], :int
10
+ attach_function 'kill', [ :int, :int ], :int
11
+ attach_function 'malloc', [ :size_t ], :pointer
12
+ attach_function 'free', [ :pointer ], :void
13
+ end
14
+
15
+ class PTRegs < FFI::Struct
16
+ include Ragweed::FFIStructInclude
17
+ layout :ebx, :ulong,
18
+ :ecx, :ulong,
19
+ :edx, :ulong,
20
+ :esi, :ulong,
21
+ :edi, :ulong,
22
+ :ebp, :ulong,
23
+ :eax, :ulong,
24
+ :xds, :ulong,
25
+ :xes, :ulong,
26
+ :xfs, :ulong,
27
+ :xgs, :ulong,
28
+ :orig_eax, :ulong,
29
+ :eip, :ulong,
30
+ :xcs, :ulong,
31
+ :eflags, :ulong,
32
+ :esp, :ulong,
33
+ :xss, :ulong
34
+ end
35
+
36
+ class << self
37
+ # pid_t wait(int *status);
38
+ def wait
39
+ stat = FFI::MemoryPointer.new(:int, 1)
40
+ FFI.errno = 0
41
+ pid = Libc.wait stat
42
+ raise SystemCallError.new "wait", FFI.errno if pid == -1
43
+ [pid, stat.read_pointer.get_int32]
44
+ end
45
+
46
+ # pid_t waitpid(pid_t pid, int *status, int options);
47
+ def waitpid pid, opts = 0
48
+ p = FFI::MemoryPointer.new(:int, 1)
49
+ FFI.errno = 0
50
+ r = Libc.waitpid(pid,p,opts)
51
+ raise SystemCallError.new "waitpid", FFI.errno if r == -1
52
+ status = p.get_int32(0)
53
+ [r, status]
54
+ end
55
+
56
+ # int kill(pid_t pid, int sig);
57
+ def kill pid, sig
58
+ FFI.errno = 0
59
+ r = Libc.kill pid, sig
60
+ raise SystemCallError.new "waitpid", FFI.errno if r == -1
61
+ r
62
+ end
63
+
64
+ #long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);
65
+ def ptrace req, pid, addr, data
66
+ FFI.errno = 0
67
+ r = Libc.ptrace req, pid, addr, data
68
+ #raise SystemCallError.new "ptrace", FFI.errno if r == -1 and !FFI.errno.zero?
69
+ r
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,57 @@
1
+ # Dir[File.expand_path("#{File.dirname(__FILE__)}/wraptux/*.rb")].each do |file|
2
+ # require file
3
+ # end
4
+
5
+ module Ragweed; end
6
+ module Ragweed::Wraptux
7
+ # :stopdoc:
8
+ VERSION = File.read(File.join(File.dirname(__FILE__),"..","..","VERSION")).strip
9
+ LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
10
+ PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
11
+ # :startdoc:
12
+
13
+ # Returns the version string for the library.
14
+ #
15
+ def self.version
16
+ VERSION
17
+ end
18
+
19
+ # Returns the library path for the module. If any arguments are given,
20
+ # they will be joined to the end of the libray path using
21
+ # <tt>File.join</tt>.
22
+ #
23
+ def self.libpath( *args )
24
+ args.empty? ? LIBPATH : ::File.join(LIBPATH, args.flatten)
25
+ end
26
+
27
+ # Returns the lpath for the module. If any arguments are given,
28
+ # they will be joined to the end of the path using
29
+ # <tt>File.join</tt>.
30
+ #
31
+ def self.path( *args )
32
+ args.empty? ? PATH : ::File.join(PATH, args.flatten)
33
+ end
34
+
35
+ # Utility function to load utility classes and extensions
36
+ def self.require_utils
37
+ %w{utils}.each{|r| require self.libpath(r)+'.rb'}
38
+ end
39
+
40
+ # Utility method used to require all files ending in .rb that lie in the
41
+ # directory below this file that has the same name as the filename passed
42
+ # in. Optionally, a specific _directory_ name can be passed in such that
43
+ # the _filename_ does not have to be equivalent to the directory.
44
+ #
45
+ def self.require_all_libs_relative_to( fname, dir = nil )
46
+ self.require_utils
47
+ dir ||= ::File.basename(fname, '.*')
48
+ search_me = ::File.expand_path(
49
+ ::File.join(::File.dirname(fname), dir, '**', '*.rb'))
50
+ Dir.glob(search_me).sort.each {|rb| require rb }
51
+ # require File.dirname(File.basename(__FILE__)) + "/#{x}"
52
+ end
53
+ end # module Ragweed::Wraptux
54
+
55
+ Ragweed::Wraptux.require_all_libs_relative_to(__FILE__)
56
+
57
+ # EOF
data/lib/ragweed.rb ADDED
@@ -0,0 +1,112 @@
1
+ require 'ffi'
2
+
3
+ module Ragweed
4
+
5
+ # :stopdoc:
6
+ VERSION = File.read(File.join(File.dirname(__FILE__),"..","VERSION")).strip
7
+ LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
8
+ PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
9
+ # :startdoc:
10
+
11
+ # Returns the version string for the library.
12
+ #
13
+ def self.version
14
+ VERSION
15
+ end
16
+
17
+ # Returns the library path for the module. If any arguments are given,
18
+ # they will be joined to the end of the libray path using
19
+ # <tt>File.join</tt>.
20
+ #
21
+ def self.libpath( *args )
22
+ args.empty? ? LIBPATH : ::File.join(LIBPATH, args.flatten)
23
+ end
24
+
25
+ # Returns the lpath for the module. If any arguments are given,
26
+ # they will be joined to the end of the path using
27
+ # <tt>File.join</tt>.
28
+ #
29
+ def self.path( *args )
30
+ args.empty? ? PATH : ::File.join(PATH, args.flatten)
31
+ end
32
+
33
+ # Utility method used to require all files ending in .rb that lie in the
34
+ # directory below this file that has the same name as the filename passed
35
+ # in. Optionally, a specific _directory_ name can be passed in such that
36
+ # the _filename_ does not have to be equivalent to the directory.
37
+ #
38
+ def self.require_all_libs_relative_to( fname, dir = nil )
39
+ dir ||= ::File.basename(fname, '.*')
40
+ search_me = ::File.expand_path(
41
+ ::File.join(::File.dirname(fname), dir, '**', '*.rb'))
42
+ # Don't want to load wrapper or debugger here.
43
+ Dir.glob(search_me).sort.reject{|rb| rb =~ /(wrap|debugger|rasm[^\.])/}.each {|rb| require rb}
44
+ # require File.dirname(File.basename(__FILE__)) + "/#{x}"d
45
+ end
46
+
47
+ def self.require_os_libs_relative_to( fname, dir= nil )
48
+ dir ||= ::File.basename(fname, '.*')
49
+ pkgs = ""
50
+ dbg = ""
51
+
52
+ case
53
+ when ::FFI::Platform.windows?
54
+ pkgs = '32'
55
+ when ::FFI::Platform.mac?
56
+ pkgs = 'osx'
57
+ # coming soon
58
+ # when ::FFI::Platform.bsd?
59
+ # pkgs = "bsd"
60
+ when ::FFI::Platform.unix? && ! ::FFI::Platform.bsd?
61
+ # FFI doesn't specifically detect linux so... we punt
62
+ pkgs = 'tux'
63
+ else
64
+ warn "Platform not supported no wrapper libraries loaded."
65
+ end
66
+
67
+ if not pkgs.empty?
68
+ search_me = File.expand_path(File.join(File.dirname(fname), dir, "*#{pkgs}.rb"))
69
+ Dir.glob(search_me).sort.reverse.each {|rb| require rb}
70
+ end
71
+ end
72
+ end # module Ragweed
73
+
74
+ ## FFI Struct Accessor Methods
75
+ module Ragweed::FFIStructInclude
76
+ if RUBY_VERSION < "1.9"
77
+ def methods regular=true
78
+ (super + self.members.map{|x| [x.to_s, x.to_s+"="]}).flatten
79
+ end
80
+ else
81
+ def methods regular=true
82
+ (super + self.members.map{|x| [x, (x.to_s+"=").intern]}).flatten
83
+ end
84
+ end
85
+
86
+ def method_missing meth, *args
87
+ super unless self.respond_to? meth
88
+ if meth.to_s =~ /=$/
89
+ self.__send__(:[]=, meth.to_s.gsub(/=$/,'').intern, *args)
90
+ else
91
+ self.__send__(:[], meth, *args)
92
+ end
93
+ end
94
+
95
+ def respond_to? meth, include_priv=false
96
+ # mth = meth.to_s.gsub(/=$/,'')
97
+ !((self.methods & [meth, meth.to_s]).empty?) || super
98
+ end
99
+ end
100
+
101
+ # pkgs = %w[arena sbuf ptr process event rasm blocks detour trampoline device debugger hooks]
102
+ # pkgs << 'wrap32' if RUBY_PLATFORM =~ /win(dows|32)/i
103
+ # pkgs << 'wraposx' if RUBY_PLATFORM =~ /darwin/i
104
+ # pkgs << 'wraptux' if RUBY_PLATFORM =~ /linux/i
105
+ # pkgs.each do |x|
106
+ # require File.dirname(__FILE__) + "/#{x}"
107
+ # end
108
+
109
+
110
+ Ragweed.require_os_libs_relative_to(__FILE__)
111
+ Ragweed.require_all_libs_relative_to(__FILE__)
112
+ # EOF
data/ragweed.gemspec ADDED
@@ -0,0 +1,102 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{ragweed}
8
+ s.version = "0.2.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["tduehr", "struct", "tqbf"]
12
+ s.date = %q{2011-04-12}
13
+ s.description = %q{General debugging tool written in Ruby for OSX/Win32/Linux}
14
+ s.email = %q{td@matasano.com}
15
+ s.extra_rdoc_files = [
16
+ "README.rdoc",
17
+ "README.txt"
18
+ ]
19
+ s.files = [
20
+ "History.txt",
21
+ "README.rdoc",
22
+ "README.txt",
23
+ "Rakefile",
24
+ "VERSION",
25
+ "examples/hittracertux.rb",
26
+ "examples/hittracerx.rb",
27
+ "examples/hook_notepad.rb",
28
+ "examples/snicker.rb",
29
+ "examples/tux-example.rb",
30
+ "lib/ragweed.rb",
31
+ "lib/ragweed/arena.rb",
32
+ "lib/ragweed/blocks.rb",
33
+ "lib/ragweed/debugger32.rb",
34
+ "lib/ragweed/debuggerosx.rb",
35
+ "lib/ragweed/debuggertux.rb",
36
+ "lib/ragweed/detour.rb",
37
+ "lib/ragweed/ptr.rb",
38
+ "lib/ragweed/rasm.rb",
39
+ "lib/ragweed/rasm/bblock.rb",
40
+ "lib/ragweed/rasm/isa.rb",
41
+ "lib/ragweed/sbuf.rb",
42
+ "lib/ragweed/trampoline.rb",
43
+ "lib/ragweed/utils.rb",
44
+ "lib/ragweed/wrap32.rb",
45
+ "lib/ragweed/wrap32/debugging.rb",
46
+ "lib/ragweed/wrap32/device.rb",
47
+ "lib/ragweed/wrap32/event.rb",
48
+ "lib/ragweed/wrap32/hooks.rb",
49
+ "lib/ragweed/wrap32/overlapped.rb",
50
+ "lib/ragweed/wrap32/process.rb",
51
+ "lib/ragweed/wrap32/process_token.rb",
52
+ "lib/ragweed/wrap32/thread_context.rb",
53
+ "lib/ragweed/wrap32/winx.rb",
54
+ "lib/ragweed/wrap32/wrap32.rb",
55
+ "lib/ragweed/wraposx.rb",
56
+ "lib/ragweed/wraposx/constants.rb",
57
+ "lib/ragweed/wraposx/kernelerrorx.rb",
58
+ "lib/ragweed/wraposx/region_info.rb",
59
+ "lib/ragweed/wraposx/structs.rb",
60
+ "lib/ragweed/wraposx/thread_context.rb",
61
+ "lib/ragweed/wraposx/thread_info.rb",
62
+ "lib/ragweed/wraposx/thread_info.rb.old",
63
+ "lib/ragweed/wraposx/wraposx.rb",
64
+ "lib/ragweed/wraptux.rb",
65
+ "lib/ragweed/wraptux/constants.rb",
66
+ "lib/ragweed/wraptux/process.rb",
67
+ "lib/ragweed/wraptux/threads.rb",
68
+ "lib/ragweed/wraptux/wraptux.rb",
69
+ "ragweed.gemspec",
70
+ "spec/ragweed_spec.rb",
71
+ "spec/spec_helper.rb",
72
+ "test/test_ragweed.rb"
73
+ ]
74
+ s.homepage = %q{http://github.com/tduehr/ragweed}
75
+ s.rdoc_options = ["--inline-source", "--line-numbers", "--main", "README.rdoc"]
76
+ s.require_paths = ["lib"]
77
+ s.rubygems_version = %q{1.5.2}
78
+ s.summary = %q{Scriptable debugger}
79
+ s.test_files = [
80
+ "examples/hittracertux.rb",
81
+ "examples/hittracerx.rb",
82
+ "examples/hook_notepad.rb",
83
+ "examples/snicker.rb",
84
+ "examples/tux-example.rb",
85
+ "spec/ragweed_spec.rb",
86
+ "spec/spec_helper.rb",
87
+ "test/test_ragweed.rb"
88
+ ]
89
+
90
+ if s.respond_to? :specification_version then
91
+ s.specification_version = 3
92
+
93
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
94
+ s.add_runtime_dependency(%q<ffi>, ["~> 1.0"])
95
+ else
96
+ s.add_dependency(%q<ffi>, ["~> 1.0"])
97
+ end
98
+ else
99
+ s.add_dependency(%q<ffi>, ["~> 1.0"])
100
+ end
101
+ end
102
+
@@ -0,0 +1,7 @@
1
+
2
+ require File.join(File.dirname(__FILE__), %w[spec_helper])
3
+
4
+ describe Ragweed do
5
+ end
6
+
7
+ # EOF
@@ -0,0 +1,16 @@
1
+
2
+ require File.expand_path(
3
+ File.join(File.dirname(__FILE__), %w[.. lib ragweed]))
4
+
5
+ Spec::Runner.configure do |config|
6
+ # == Mock Framework
7
+ #
8
+ # RSpec uses it's own mocking framework by default. If you prefer to
9
+ # use mocha, flexmock or RR, uncomment the appropriate line:
10
+ #
11
+ # config.mock_with :mocha
12
+ # config.mock_with :flexmock
13
+ # config.mock_with :rr
14
+ end
15
+
16
+ # EOF
File without changes
metadata ADDED
@@ -0,0 +1,121 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ragweed
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.2.0
6
+ platform: java
7
+ authors:
8
+ - tduehr
9
+ - struct
10
+ - tqbf
11
+ autorequire:
12
+ bindir: bin
13
+ cert_chain: []
14
+
15
+ date: 2011-04-12 00:00:00 -05:00
16
+ default_executable:
17
+ dependencies: []
18
+
19
+ description: General debugging tool written in Ruby for OSX/Win32/Linux
20
+ email: td@matasano.com
21
+ executables: []
22
+
23
+ extensions: []
24
+
25
+ extra_rdoc_files:
26
+ - README.rdoc
27
+ - README.txt
28
+ files:
29
+ - History.txt
30
+ - README.rdoc
31
+ - README.txt
32
+ - Rakefile
33
+ - VERSION
34
+ - examples/hittracertux.rb
35
+ - examples/hittracerx.rb
36
+ - examples/hook_notepad.rb
37
+ - examples/snicker.rb
38
+ - examples/tux-example.rb
39
+ - lib/ragweed.rb
40
+ - lib/ragweed/arena.rb
41
+ - lib/ragweed/blocks.rb
42
+ - lib/ragweed/debugger32.rb
43
+ - lib/ragweed/debuggerosx.rb
44
+ - lib/ragweed/debuggertux.rb
45
+ - lib/ragweed/detour.rb
46
+ - lib/ragweed/ptr.rb
47
+ - lib/ragweed/rasm.rb
48
+ - lib/ragweed/rasm/bblock.rb
49
+ - lib/ragweed/rasm/isa.rb
50
+ - lib/ragweed/sbuf.rb
51
+ - lib/ragweed/trampoline.rb
52
+ - lib/ragweed/utils.rb
53
+ - lib/ragweed/wrap32.rb
54
+ - lib/ragweed/wrap32/debugging.rb
55
+ - lib/ragweed/wrap32/device.rb
56
+ - lib/ragweed/wrap32/event.rb
57
+ - lib/ragweed/wrap32/hooks.rb
58
+ - lib/ragweed/wrap32/overlapped.rb
59
+ - lib/ragweed/wrap32/process.rb
60
+ - lib/ragweed/wrap32/process_token.rb
61
+ - lib/ragweed/wrap32/thread_context.rb
62
+ - lib/ragweed/wrap32/winx.rb
63
+ - lib/ragweed/wrap32/wrap32.rb
64
+ - lib/ragweed/wraposx.rb
65
+ - lib/ragweed/wraposx/constants.rb
66
+ - lib/ragweed/wraposx/kernelerrorx.rb
67
+ - lib/ragweed/wraposx/region_info.rb
68
+ - lib/ragweed/wraposx/structs.rb
69
+ - lib/ragweed/wraposx/thread_context.rb
70
+ - lib/ragweed/wraposx/thread_info.rb
71
+ - lib/ragweed/wraposx/thread_info.rb.old
72
+ - lib/ragweed/wraposx/wraposx.rb
73
+ - lib/ragweed/wraptux.rb
74
+ - lib/ragweed/wraptux/constants.rb
75
+ - lib/ragweed/wraptux/process.rb
76
+ - lib/ragweed/wraptux/threads.rb
77
+ - lib/ragweed/wraptux/wraptux.rb
78
+ - ragweed.gemspec
79
+ - spec/ragweed_spec.rb
80
+ - spec/spec_helper.rb
81
+ - test/test_ragweed.rb
82
+ has_rdoc: true
83
+ homepage: http://github.com/tduehr/ragweed
84
+ licenses: []
85
+
86
+ post_install_message:
87
+ rdoc_options:
88
+ - --inline-source
89
+ - --line-numbers
90
+ - --main
91
+ - README.rdoc
92
+ require_paths:
93
+ - lib
94
+ required_ruby_version: !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: "0"
100
+ required_rubygems_version: !ruby/object:Gem::Requirement
101
+ none: false
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: "0"
106
+ requirements: []
107
+
108
+ rubyforge_project:
109
+ rubygems_version: 1.5.1
110
+ signing_key:
111
+ specification_version: 3
112
+ summary: Scriptable debugger
113
+ test_files:
114
+ - examples/hittracertux.rb
115
+ - examples/hittracerx.rb
116
+ - examples/hook_notepad.rb
117
+ - examples/snicker.rb
118
+ - examples/tux-example.rb
119
+ - spec/ragweed_spec.rb
120
+ - spec/spec_helper.rb
121
+ - test/test_ragweed.rb