@@ -35,8 +35,20 @@ def set!(entry: nil, phoffset: nil, shoffset: nil, shnum: nil, shstrndx: nil)
3535 @shstrndx = num2bytes ( shstrndx , 2 ) if check ( shstrndx , 2 )
3636 end
3737
38- private
38+ def ehsize = get ( :ehsize )
39+ def phsize = get ( :phsize )
40+ def phnum = get ( :phnum )
41+ def shentsize = get ( :shentsize )
42+ def shnum = get ( :shnum )
43+ def shstrndx = get ( :shstrndx )
44+
45+ LONG_TYPES = %w[ entry phoffset shoffset ] . freeze
46+ INT_TYPES = %w[ type version ] . freeze
47+ SHORT_TYPES = %w[ ehsize phsize phnum shentsize shnum shstrndx ] . freeze
48+ CHAR_TYPES = %w[ arch flags ] . freeze
49+ private_constant :LONG_TYPES , :INT_TYPES , :SHORT_TYPES , :CHAR_TYPES
3950
51+ private
4052 def bytes = [
4153 @ident , @type , @arch , @version , @entry , @phoffset ,
4254 @shoffset , @flags , @ehsize , @phsize , @phnum , @shentsize ,
@@ -62,6 +74,18 @@ def elf(type)
6274 :NONE
6375 end
6476 end
77+
78+ def get ( type )
79+ val = instance_variable_get ( :"@#{ type . to_s } " ) . pack ( "C*" )
80+ case type . to_s . downcase
81+ when *LONG_TYPES ; val . unpack ( "Q<" )
82+ when *INT_TYPES ; val . unpack ( "L<" )
83+ when *SHORT_TYPES ; val . unpack ( "S<" )
84+ when *CHAR_TYPES ; val . unpack ( "C<" )
85+ else
86+ raise "not specified: #{ type } "
87+ end . first
88+ end
6589 end
6690 end
6791 end
0 commit comments