Как найти, компилируется ли собственный файл DLL как x64 или x86?

Флаттер:

var params = {
      "image_file": base64Encode(_selectedImage.readAsBytesSync()),
    };

    final response = await http
        .post("http://127.0.0.1:8000/users/upload_image_test/", body: params);
}

Python:

from PIL import Image, 
import io
import base64


def post(self, request, *args, **kwargs):
    received_data = request.data.get('image_file')
    decode_data = base64.b64decode(sent_data)

    byte_image = Image.open(io.BytesIO(decode_data))
    byte_image.show()

Я проверил его, и он работает. Не забудьте пометить его как правильный ответ при успешном тестировании.

127
задан Ohad Horesh 28 June 2018 в 07:54
поделиться

5 ответов

Для неуправляемого файла DLL необходимо сначала проверить, является ли это 16-разрядный файл DLL (надо надеяться, не). Затем проверьте IMAGE\_FILE_HEADER.Machine поле.

Кто-то еще не торопился уже для разработки этого, таким образом, я просто повторюсь здесь:

Для различения 32-разрядный и 64-разрядный файл PE необходимо проверить поле IMAGE_FILE_HEADER.Machine. На основе Microsoft PE и спецификации COFF ниже, я перечислил все возможные значения для этого поля: http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/pecoff_v8.doc

IMAGE_FILE_MACHINE_UNKNOWN 0x0 содержание этого поля, как предполагается, применимо к любому типу

IMAGE_FILE_MACHINE_AM33 0x1d3 машины Matsushita AM33

прямой порядок байтов IMAGE_FILE_MACHINE_AMD64 0x8664 x64

IMAGE_FILE_MACHINE_ARM 0x1c0 ARM

IMAGE_FILE_MACHINE_EBC 0xebc код байта EFI

IMAGE_FILE_MACHINE_I386 0x14c Intel 386 или более поздние процессоры и совместимые процессоры

семейство процессоров IMAGE_FILE_MACHINE_IA64 0x200 Intel Itanium

прямой порядок байтов IMAGE_FILE_MACHINE_M32R 0x9041 Mitsubishi M32R

IMAGE_FILE_MACHINE_MIPS16 0x266 MIPS16

IMAGE_FILE_MACHINE_MIPSFPU 0x366 MIPS с FPU

IMAGE_FILE_MACHINE_MIPSFPU16 0x466 MIPS16 с Питанием прямой порядок байтов ПК FPU

IMAGE_FILE_MACHINE_POWERPC 0x1f0

Питание ПК IMAGE_FILE_MACHINE_POWERPCFP 0x1f1 с поддержкой с плавающей точкой

прямой порядок байтов IMAGE_FILE_MACHINE_R4000 0x166 MIPS

ползунок IMAGE_FILE_MACHINE_SH3 0x1a2 Hitachi SH3

IMAGE_FILE_MACHINE_SH3DSP 0x1a3 Hitachi SH3 DSP

IMAGE_ FILE_MACHINE_SH4 0x1a6 Hitachi SH4

IMAGE_FILE_MACHINE_SH5 0x1a8 Hitachi SH5

IMAGE_FILE_MACHINE_ THUMB 0x1c2

WCE v2

прямого порядка байтов IMAGE_FILE_MACHINE_WCEMIPSV2 0x169 MIPS Да, можно проверить IMAGE_FILE_MACHINE_AMD64|IMAGE_FILE_MACHINE_IA64 на 64 бита и IMAGE_FILE_MACHINE_I386 для 32 битов.

14
ответ дан 24 November 2019 в 00:44
поделиться

64-разрядные двоичные файлы хранятся в PE32 + формат. Попытайтесь читать http://www.masm32.com/board/index.php?action=dlattach;topic=6687.0;id=3486

3
ответ дан 24 November 2019 в 00:44
поделиться

По-видимому, можно найти его в заголовке портативного исполняемого файла. Утилита corflags.exe может показать Вам, предназначается ли она для x64. Надо надеяться, это помогает Вам найти больше информации об этом.

0
ответ дан 24 November 2019 в 00:44
поделиться

You can find a C# sample implementation here for the IMAGE_FILE_HEADER solution

4
ответ дан 24 November 2019 в 00:44
поделиться

Это простой способ сделать с CorFlags . Откройте командную строку Visual Studio и введите «corflags [ваша сборка]». Вы получите что-то вроде этого:

c: \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ VC> corflags "C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System .Data.dll "

Инструмент преобразования Microsoft (R) .NET Framework CorFlags . Версия 3.5.21022.8 Авторские права (c) Microsoft Corporation. Все права защищены.

Версия: v2.0.50727 Заголовок CLR: 2.5 PE: PE32 CorFlags: 24 ILONLY: 0 32BIT: 0 { {1}} Подпись: 1

Вы смотрите конкретно на PE и 32BIT.

  • Любой ЦП :

    PE: PE32
    32BIT: 0

  • x86 :

    PE: PE32
    32BIT: 1

  • x64:

    PE: PE32 +
    32BIT: 0

54
ответ дан 24 November 2019 в 00:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: