resedit 1.4 → 1.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/resedit.rb +1 -1
- data/lib/resedit/app/mz_command.rb +4 -0
- data/lib/resedit/app/std_commands.rb +1 -1
- data/lib/resedit/mz/mz.rb +7 -0
- data/lib/resedit/mz/mz_header.rb +36 -2
- metadata +21 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c544c164c27a245f45cebe0ede011c1a8ebd19d2
|
4
|
+
data.tar.gz: a212b23cc05f16ec779469aecc74601b046ae468
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 85deaaad0d6928ceafda0bb8a6642b8af902f061870c1e8a0fc2ba33bf3e3c25c97c83ac38c2858534214f058f713b3e955bba3fa995eacf77abb4b9ea47ea42
|
7
|
+
data.tar.gz: a8c03dcca383eb79c3215009e4c3563e73cce82e05bd590946926b70ef3a56d57433e57ca51dbb4ea2fbf07596cad6106ccf6fadc66ed6fbd9cd2510db6815de
|
data/lib/resedit.rb
CHANGED
@@ -25,6 +25,7 @@ module Resedit
|
|
25
25
|
"append"=>[method(:append), "add bytes to current file", {"value" => "value", "type" => "value type", }],
|
26
26
|
"replace"=>[method(:replace), "replace added bytes", {"value" => "value", "type"=>"value type"}],
|
27
27
|
"change"=>[method(:change), "change bytes at offset", {"ofs" => "data ofset", "value" => "value", "disp" => "code/file", "type"=>"value type"}],
|
28
|
+
"reloc"=>[method(:reloc), "add relocation", {"value" => "value"}],
|
28
29
|
"revert"=>[method(:revert), "revert changes", {"ofs"=>"change offset/all"}],
|
29
30
|
"hex"=>[method(:hex), "print hex file", {"ofs" => "data offset", "size" => "data size", "how"=>"original/modified", "disp" => "code/file"}],
|
30
31
|
"dasm"=>[method(:dasm), "print disasm", {"ofs" => "data offset", "size" => "data size", "how"=>"original/modified"}],
|
@@ -142,6 +143,9 @@ module Resedit
|
|
142
143
|
cur().change(params['ofs'], params['value'], params['disp'], params['type'])
|
143
144
|
end
|
144
145
|
|
146
|
+
def reloc(params)
|
147
|
+
cur().reloc(params['value'])
|
148
|
+
end
|
145
149
|
|
146
150
|
def revert(params)
|
147
151
|
cur().revert(params['ofs'])
|
@@ -28,7 +28,7 @@ module Resedit
|
|
28
28
|
addParam('command', 'help on specific command', '')
|
29
29
|
end
|
30
30
|
def job(params)
|
31
|
-
if params['command']
|
31
|
+
if params['command'] != ''
|
32
32
|
cmd = App.get().cmds[params['command']]
|
33
33
|
raise "Unknown command: #{params['command']}" if !cmd
|
34
34
|
puts "Command:"
|
data/lib/resedit/mz/mz.rb
CHANGED
@@ -101,6 +101,7 @@ module Resedit
|
|
101
101
|
end
|
102
102
|
}
|
103
103
|
log("Appended at %s",s)
|
104
|
+
return res
|
104
105
|
end
|
105
106
|
|
106
107
|
|
@@ -122,6 +123,12 @@ module Resedit
|
|
122
123
|
log("Change added at %08X", res)
|
123
124
|
end
|
124
125
|
|
126
|
+
def reloc(ofs)
|
127
|
+
ofs = s2i(ofs)
|
128
|
+
res = @header.addReloc(ofs)
|
129
|
+
log((res ? "Relocation added %08X" : "Relocation %08X already exists"), ofs)
|
130
|
+
end
|
131
|
+
|
125
132
|
|
126
133
|
def dasm(ofs, size=nil, how=nil)
|
127
134
|
ofs = s2i(ofs ? ofs : "entry")
|
data/lib/resedit/mz/mz_header.rb
CHANGED
@@ -49,14 +49,25 @@ module Resedit
|
|
49
49
|
end
|
50
50
|
|
51
51
|
|
52
|
-
def
|
52
|
+
def changeSize(size)
|
53
53
|
mode(HOW_CHANGED)
|
54
|
-
size += headerSize()
|
55
54
|
mod = size % BLK
|
56
55
|
ch = [mod, size / BLK + (mod ? 1 : 0)]
|
57
56
|
change(2, ch.pack('vv'))
|
58
57
|
end
|
59
58
|
|
59
|
+
def setCodeSize(size)
|
60
|
+
changeSize(size + headerSize())
|
61
|
+
end
|
62
|
+
|
63
|
+
def addHeaderSize(size)
|
64
|
+
mode(HOW_CHANGED)
|
65
|
+
paras = size/16 + (size%16 == 0 ? 0 : 1)
|
66
|
+
append("00" * (paras * PARA))
|
67
|
+
changeSize(fileSize() + paras * PARA)
|
68
|
+
change(8, [@info[:HeaderParagraphs] + paras].pack('v'))
|
69
|
+
end
|
70
|
+
|
60
71
|
|
61
72
|
def headerSize()
|
62
73
|
return @info[:HeaderParagraphs] * PARA
|
@@ -83,6 +94,28 @@ module Resedit
|
|
83
94
|
return headerSize() - HSIZE - @info[:NumberOfRelocations] * 4
|
84
95
|
end
|
85
96
|
|
97
|
+
def addReloc(ofs)
|
98
|
+
mode(HOW_CHANGED)
|
99
|
+
#check relocation exists
|
100
|
+
for i in 0..@info[:NumberOfRelocations]-1
|
101
|
+
rel = getRelocation(i)
|
102
|
+
if @mz.body.seg2Linear(rel[0], rel[1]) == ofs
|
103
|
+
return false
|
104
|
+
end
|
105
|
+
end
|
106
|
+
#add relocation
|
107
|
+
if freeSpace()<4
|
108
|
+
addHeaderSize(4)
|
109
|
+
mode(HOW_CHANGED)
|
110
|
+
end
|
111
|
+
val = @mz.body.linear2seg(ofs)
|
112
|
+
puts "VAL"+ val.to_s()
|
113
|
+
pos = @info[:RelocTableOffset]+@info[:NumberOfRelocations]*4
|
114
|
+
change(pos, val.pack('vv'))
|
115
|
+
change(6, [@info[:NumberOfRelocations]+1].pack('v'))
|
116
|
+
return true
|
117
|
+
end
|
118
|
+
|
86
119
|
|
87
120
|
def print(what, how)
|
88
121
|
mode(parseHow(how))
|
@@ -103,6 +136,7 @@ module Resedit
|
|
103
136
|
printf("free space in header: before relocs 0x%X, after relocs 0x%X\n", freeSpace(true), freeSpace())
|
104
137
|
return true
|
105
138
|
end
|
139
|
+
@mz.body.mode(@mode)
|
106
140
|
if what == "reloc"
|
107
141
|
ofs = @info[:RelocTableOffset]
|
108
142
|
for i in 0..@info[:NumberOfRelocations]-1
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: resedit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- bjfn
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-09-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chunky_png
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 1.3.5
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: builder
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 3.2.3
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 3.2.3
|
27
41
|
description:
|
28
42
|
email:
|
29
43
|
executables:
|
@@ -31,6 +45,8 @@ executables:
|
|
31
45
|
extensions: []
|
32
46
|
extra_rdoc_files: []
|
33
47
|
files:
|
48
|
+
- bin/resedit
|
49
|
+
- lib/resedit.rb
|
34
50
|
- lib/resedit/app/app.rb
|
35
51
|
- lib/resedit/app/app_command.rb
|
36
52
|
- lib/resedit/app/colorizer.rb
|
@@ -58,8 +74,6 @@ files:
|
|
58
74
|
- lib/resedit/text/format_xml.rb
|
59
75
|
- lib/resedit/text/huffman.rb
|
60
76
|
- lib/resedit/text/text.rb
|
61
|
-
- lib/resedit.rb
|
62
|
-
- bin/resedit
|
63
77
|
homepage:
|
64
78
|
licenses: []
|
65
79
|
metadata: {}
|
@@ -69,17 +83,17 @@ require_paths:
|
|
69
83
|
- lib
|
70
84
|
required_ruby_version: !ruby/object:Gem::Requirement
|
71
85
|
requirements:
|
72
|
-
- -
|
86
|
+
- - ">="
|
73
87
|
- !ruby/object:Gem::Version
|
74
88
|
version: '0'
|
75
89
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
90
|
requirements:
|
77
|
-
- -
|
91
|
+
- - ">="
|
78
92
|
- !ruby/object:Gem::Version
|
79
93
|
version: '0'
|
80
94
|
requirements: []
|
81
95
|
rubyforge_project:
|
82
|
-
rubygems_version: 2.
|
96
|
+
rubygems_version: 2.6.11
|
83
97
|
signing_key:
|
84
98
|
specification_version: 4
|
85
99
|
summary: OG resource proc library!
|