ragweed 0.2.0-java
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +32 -0
- data/README.rdoc +60 -0
- data/README.txt +9 -0
- data/Rakefile +86 -0
- data/VERSION +1 -0
- data/examples/hittracertux.rb +45 -0
- data/examples/hittracerx.rb +63 -0
- data/examples/hook_notepad.rb +9 -0
- data/examples/snicker.rb +183 -0
- data/examples/tux-example.rb +24 -0
- data/lib/ragweed/arena.rb +55 -0
- data/lib/ragweed/blocks.rb +128 -0
- data/lib/ragweed/debugger32.rb +400 -0
- data/lib/ragweed/debuggerosx.rb +456 -0
- data/lib/ragweed/debuggertux.rb +502 -0
- data/lib/ragweed/detour.rb +223 -0
- data/lib/ragweed/ptr.rb +48 -0
- data/lib/ragweed/rasm/bblock.rb +73 -0
- data/lib/ragweed/rasm/isa.rb +1115 -0
- data/lib/ragweed/rasm.rb +59 -0
- data/lib/ragweed/sbuf.rb +197 -0
- data/lib/ragweed/trampoline.rb +103 -0
- data/lib/ragweed/utils.rb +182 -0
- data/lib/ragweed/wrap32/debugging.rb +401 -0
- data/lib/ragweed/wrap32/device.rb +49 -0
- data/lib/ragweed/wrap32/event.rb +50 -0
- data/lib/ragweed/wrap32/hooks.rb +39 -0
- data/lib/ragweed/wrap32/overlapped.rb +46 -0
- data/lib/ragweed/wrap32/process.rb +613 -0
- data/lib/ragweed/wrap32/process_token.rb +75 -0
- data/lib/ragweed/wrap32/thread_context.rb +142 -0
- data/lib/ragweed/wrap32/winx.rb +16 -0
- data/lib/ragweed/wrap32/wrap32.rb +583 -0
- data/lib/ragweed/wrap32.rb +59 -0
- data/lib/ragweed/wraposx/constants.rb +114 -0
- data/lib/ragweed/wraposx/kernelerrorx.rb +147 -0
- data/lib/ragweed/wraposx/region_info.rb +275 -0
- data/lib/ragweed/wraposx/structs.rb +102 -0
- data/lib/ragweed/wraposx/thread_context.rb +902 -0
- data/lib/ragweed/wraposx/thread_info.rb +160 -0
- data/lib/ragweed/wraposx/thread_info.rb.old +121 -0
- data/lib/ragweed/wraposx/wraposx.rb +356 -0
- data/lib/ragweed/wraposx.rb +60 -0
- data/lib/ragweed/wraptux/constants.rb +101 -0
- data/lib/ragweed/wraptux/process.rb +35 -0
- data/lib/ragweed/wraptux/threads.rb +7 -0
- data/lib/ragweed/wraptux/wraptux.rb +72 -0
- data/lib/ragweed/wraptux.rb +57 -0
- data/lib/ragweed.rb +112 -0
- data/ragweed.gemspec +102 -0
- data/spec/ragweed_spec.rb +7 -0
- data/spec/spec_helper.rb +16 -0
- data/test/test_ragweed.rb +0 -0
- 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,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
|
+
|
data/spec/spec_helper.rb
ADDED
@@ -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
|