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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c6ddbe66a77c0195afafaaff1c2756e915f38614
4
- data.tar.gz: c97154c36b5753121497f2d01ef6ce38fc0d1fc0
3
+ metadata.gz: c544c164c27a245f45cebe0ede011c1a8ebd19d2
4
+ data.tar.gz: a212b23cc05f16ec779469aecc74601b046ae468
5
5
  SHA512:
6
- metadata.gz: e9d0e7a836d85b455f4b2172b4d891f9f938f55c38b275f8e7aaa0c88e36b362e9bb4601927fed859a48c1a2767f414092f1adc38672f115e84e1633cdf10127
7
- data.tar.gz: 60b8f1b47633ea8520649b2be11592ec057e53f682caa1e98cb3ca5a9ab2429d7e20111d8a6a2f687a39e0ad994877ce1a58cf0cfabbea643f39ebb4accf2874
6
+ metadata.gz: 85deaaad0d6928ceafda0bb8a6642b8af902f061870c1e8a0fc2ba33bf3e3c25c97c83ac38c2858534214f058f713b3e955bba3fa995eacf77abb4b9ea47ea42
7
+ data.tar.gz: a8c03dcca383eb79c3215009e4c3563e73cce82e05bd590946926b70ef3a56d57433e57ca51dbb4ea2fbf07596cad6106ccf6fadc66ed6fbd9cd2510db6815de
@@ -13,5 +13,5 @@ require 'resedit/mz/mz'
13
13
 
14
14
 
15
15
  module Resedit
16
- VERSION = "1.4"
16
+ VERSION = "1.5.1"
17
17
  end
@@ -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:"
@@ -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")
@@ -49,14 +49,25 @@ module Resedit
49
49
  end
50
50
 
51
51
 
52
- def setCodeSize(size)
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: '1.4'
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-08-21 00:00:00.000000000 Z
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.0.14.1
96
+ rubygems_version: 2.6.11
83
97
  signing_key:
84
98
  specification_version: 4
85
99
  summary: OG resource proc library!