Class: PEdump::NE::VersionString

Inherits:
Object
  • Object
show all
Defined in:
lib/pedump/ne/version_info.rb

Class Method Summary collapse

Class Method Details

.read(f, size = SIZE) ⇒ Object



116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'lib/pedump/ne/version_info.rb', line 116

def self.read f, size = SIZE
  pos = f.tell
  super.tap do |x|
    x.szKey   = f.gets("\x00").to_s.chomp("\x00")
    x.Padding = f.tell%4 > 0 ? f.read(4 - f.tell%4) : nil

    value_len = [x.wValueLength*2, x.wLength - (f.tell-pos)].min
    value_len = 0 if value_len < 0

    cp = PEdump::NE.cp # XXX HACK

    x.Value   = f.read(value_len).to_s.chomp("\x00")
    x.Value.force_encoding("CP#{cp}").encode!('UTF-8').sub!(/\u0000$/,'') rescue nil
    if f.tell%4 > 0
      f.read(4-f.tell%4) # undoc padding?
    end
  end
end