resedit 1.4 → 1.5.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.
- 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!
|