ragweed 0.2.0-java

Sign up to get free protection for your applications and to get access to all the features.
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