@@ -67,16 +67,26 @@ String find_go_version(Address base_addr) throws BinaryAccessException {
6767
6868 Optional <String > find_module_version (Address base_addr ) throws BinaryAccessException {
6969 byte size =(byte )go_bin .get_address_value (base_addr , 14 , 1 );
70+ byte endian =(byte )go_bin .get_address_value (base_addr , 15 , 1 );
7071
71- long addr_value =go_bin .get_address_value (base_addr , 16 +size , size );
72- if (!go_bin .is_valid_address (addr_value )) {
73- return Optional .empty ();
74- }
75- Address bytes_addr =go_bin .get_address (go_bin .get_address_value (addr_value , size ));
76- if (!go_bin .is_valid_address (bytes_addr )) {
77- return Optional .empty ();
72+ Address bytes_addr ;
73+ long bytes_size ;
74+ if ((endian &2 )==0 ) {
75+ long addr_value =go_bin .get_address_value (base_addr , 16 +size , size );
76+ if (!go_bin .is_valid_address (addr_value )) {
77+ return Optional .empty ();
78+ }
79+ bytes_addr =go_bin .get_address (go_bin .get_address_value (addr_value , size ));
80+ if (!go_bin .is_valid_address (bytes_addr )) {
81+ return Optional .empty ();
82+ }
83+ bytes_size =go_bin .get_address_value (addr_value + size , size );
84+ } else {
85+ long ver_str_size =go_bin .get_address_value (base_addr , 32 , 1 );
86+ Address go_ver_end_addr =go_bin .get_address (base_addr , 32 +1 +ver_str_size );
87+ bytes_addr =go_bin .get_address (go_ver_end_addr , 1 );
88+ bytes_size =go_bin .get_address_value (go_ver_end_addr , 1 );
7889 }
79- long bytes_size =go_bin .get_address_value (addr_value + size , size );
8090
8191 // runtime/debug/mod.go
8292 Address mod_bytes_addr =go_bin .get_address (bytes_addr , 16 );
0 commit comments