прочитать из ресурсов PE EXE файла версию, но под *nix

tavel

Новичок
прочитать из ресурсов PE EXE файла версию, но под *nix

Друзья, помогите идеей скрипта, который бы мог работая под *nix читать версию файла из ресурсов обычных виндовых .exe или .dll. Если скрипт работает под windows, то идей мне накидали массу: wmi, vbs, импорт winapi в php, а как быть под *nix - нет идей.
 

tavel

Новичок
Автор оригинала: nerezus
вытащи структуры из виндовых хедеров и юзай их в никсе. Экстеншен.
Понятно, я надеялся, что либо есть более простое решение, либо кто-то написал ручной парсинг этих ресурсов до меня :) Формат секции ресурсов в PE файлах - не самая простая вещь на свете :(
 

nerezus

Вселенский отказник
Ты не понял. Формат описан - в виндовых заголовках.
 

tavel

Новичок
Автор оригинала: nerezus
Ты не понял. Формат описан - в виндовых заголовках.
Может и не понял. Насколько я понял, предлагалось написать на С extension для PHP, используя структуры из windows sdk. Но, поскольку установить extension на хостинг у меня возможности не было, я попросил специалиста написать такой скрипт на чистом PHP. Получился скрипт на 7Кб вот такого кода (фрагмент):
PHP:
$offs = $scn['fa'] + ($rsrc - $scn['va']); // Now offs is a file offset of the resource directory.      
// Read the root (TYPE) resource directory.    
fseek($f, $offs, SEEK_SET);           
// Seek to the resource directory.    
$rsrc = unpack('Vflags/Vtime/Vver/vnames/vids', fread($f, 0x10)); 
// sizeof(IMAGE_RESOURCE_DIRECTORY).    
// Skip named entries (if any), because we need type RT_VERSION (0x00000010).    
fseek($f, $rsrc['names'] * 0x08, SEEK_CUR); 
// sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY) * n.    
for ($i = 0; $i < $rsrc['ids']; ++$i)   
{     
   $res = unpack('Vtype/Voffs', fread($f, 0x08));  // Read ID-entry.      
   if ($res['type'] == 0x0010 && $res['offs'] & 0x80000000) // Correct type and IS a directory.        
      break;    
}    
if ($i == $rsrc['ids'])               // No RT_VERSION resources.      
   return false;
Но спрашивал я исходя из того, что есть более простое решение. То, что мне написали, сам бы я отлаживал неделю, не меньше.
 

nerezus

Вселенский отказник
За те деньги, которые спецу заплатили, вы бы год вдску арендовали )
 

tavel

Новичок
Автор оригинала: nerezus
За те деньги, которые спецу заплатили, вы бы год вдску арендовали )
Я заплатил $5. Вы уверены, что я мог бы год vds арендовать на эти деньги?
 
Сверху