Совершенно невозможно использовать скомпилированные для X86 библиотеки на Windows CE? - PullRequest
0 голосов
/ 07 августа 2020

Я изучаю возможность запрограммировать защитный ключ на Windows CE7. Компания, производящая ключ, прямо не заявляет, что поддерживается Windows CE, но, по словам их продавца, Windows CE6 должен поддерживаться. Ключ использует библиотеку импорта (.lib), которая ссылается на .dll, в которой есть функции, которые я хочу использовать. Глядя на информацию заголовка .dll с dumpbin /headers, я вижу, что .dll была скомпилирована для x86 (14 c) и что это подсистема Windows GUI. Для справки, библиотеки .dll, которые я использую на устройстве Windows CE, скомпилированы для Thumb (1c2, ARM afaik) и имеют подсистему Windows CE GUI.

Вот сокращенный вывод команды dumpbin.

Microsoft (R) COFF/PE Dumper Version 9.00.30729.01
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file <name removed>.dll

PE signature found

File Type: DLL

FILE HEADER VALUES
             14C machine (x86)
               5 number of sections
        502875ED time date stamp Mon Aug 13 12:35:09 2012
               0 file pointer to symbol table
               0 number of symbols
              E0 size of optional header
            210E characteristics
                   Executable
                   Line numbers stripped
                   Symbols stripped
                   32 bit word machine
                   DLL

OPTIONAL HEADER VALUES
             10B magic # (PE32)
            6.00 linker version
            A000 size of code
            C000 size of initialized data
               0 size of uninitialized data
            4EA2 entry point (10004EA2)
            1000 base of code
            B000 base of data
        10000000 image base (10000000 to 10016FFF)
            1000 section alignment
            1000 file alignment
            4.00 operating system version
            0.00 image version
            4.00 subsystem version
               0 Win32 version
           17000 size of image
            1000 size of headers
           1A38F checksum
               2 subsystem (Windows GUI)
               0 DLL characteristics
          100000 size of stack reserve
            1000 size of stack commit
          100000 size of heap reserve
            1000 size of heap commit
               0 loader flags
              10 number of directories
            BED0 [      D9] RVA [size] of Export Directory
            B770 [      50] RVA [size] of Import Directory
           14000 [     7C8] RVA [size] of Resource Directory
               0 [       0] RVA [size] of Exception Directory
           12000 [    17D0] RVA [size] of Certificates Directory
           15000 [     990] RVA [size] of Base Relocation Directory
               0 [       0] RVA [size] of Debug Directory
               0 [       0] RVA [size] of Architecture Directory
               0 [       0] RVA [size] of Global Pointer Directory
               0 [       0] RVA [size] of Thread Storage Directory
               0 [       0] RVA [size] of Load Configuration Directory
               0 [       0] RVA [size] of Bound Import Directory
            B000 [     144] RVA [size] of Import Address Table Directory
               0 [       0] RVA [size] of Delay Import Directory
               0 [       0] RVA [size] of COM Descriptor Directory
               0 [       0] RVA [size] of Reserved Directory

Я впервые анализирую такие библиотеки DLL и библиотеки, поэтому я не слишком хорошо с ними знаком.

  1. Если dll была скомпилирована для x86, то она может использоваться только на машинах x86 и ни на каких других архитектурах. Это имеет смысл , но, учитывая, что dll использует формат PE (ПОРТАТИВНЫЙ исполняемый файл), не должна ли быть хоть какая-то совместимость между разными архитектурами? Возможно, я неправильно понимаю его «переносимую» часть.
  2. Если вышесказанное верно, есть ли шанс заставить dll работать на Windows CE, кроме как попросить поставщика перекомпилировать dll для Windows CE?

1 Ответ

0 голосов
/ 07 августа 2020

Я связался с продавцом, и похоже, что продавец прислал мне неправильный набор DLL. На самом деле у них был набор DLL, скомпилированных для Windows CE6. Я проверил, и вроде работает. Что касается прямого ответа на мой вопрос, я основываю его на комментарии @Peter Cordes. Вы не можете использовать x86-DLL на Windows CE, так как Windows CE не понимает x86-машинный код. То же самое и наоборот. Теоретически вы можете реализовать какой-то слой эмуляции, который выполняет перевод, но самый простой вариант - это попросить поставщика перекомпилировать для Windows CE.

...