Проблема с компиляцией бинарных файлов для Windows - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь скомпилировать код из github здесь: https://github.com/ayeks/SGX-hardware/blob/master/test-sgx.c

У меня Visual Studio 2010, и я компилирую, используя (cl), версию Visual Studio для командной строки, и она дает мне следующееошибки компиляции:

sgx_check.c(6) : error C2054: expected '(' to follow 'inline'
sgx_check.c(8) : error C2085: 'native_cpuid' : not in formal parameter list
sgx_check.c(8) : error C2143: syntax error : missing ';' before '{'
sgx_check.c(88) : error C2143: syntax error : missing ';' before 'type'
sgx_check.c(89) : error C2065: 'i' : undeclared identifier
sgx_check.c(89) : error C2065: 'i' : undeclared identifier
sgx_check.c(89) : error C2065: 'i' : undeclared identifier
sgx_check.c(91) : error C2065: 'i' : undeclared identifier
sgx_check.c(91) : error C2065: 'i' : undeclared identifier
sgx_check.c(93) : error C2065: 'i' : undeclared identifier

Команда, использованная для компиляции кода:

cl sgx_check.c

Я проверил сообщения об ошибках компилятора и не могу их исправить.

Я могуисправьте сообщения об ошибках для «i» как необъявленного идентификатора, переместив строку «int i» в начало функции main ().

Я хотел бы узнать, как собрать этот двоичный файл во всех деталях.

1 Ответ

0 голосов
/ 15 февраля 2019

с использованием Linux

Я скомпилировал связанный код:

это результат:

gcc -ggdb -Wall -Wextra -Wconversion -pedantic -std=gnu11 -c "untitled2.c" 
untitled2.c: In function ‘main’:
untitled2.c:93:10: warning: conversion to ‘unsigned int’ from ‘int’ may change the sign of the result [-Wsign-conversion]
    ecx = i;
          ^
untitled2.c:32:14: warning: unused parameter ‘argc’ [-Wunused-parameter]
 int main(int argc, char **argv)
              ^~~~
untitled2.c:32:27: warning: unused parameter ‘argv’ [-Wunused-parameter]
 int main(int argc, char **argv)
                           ^~~~
Compilation finished successfully.

Учитывая этот результат, у меня есть несколько предложений:

  1. когда параметры для main() не будут использоваться, используйте подпись: int main( void )
  2. эти строки: int i; for (i=2; i<10; i++) { должно быть for( unsigned i=2; i<10; i++) {

после применения вышеуказанных исправлений:

#include <stdio.h>
#if defined(_MSC_VER)
#include <intrin.h>
#endif

static inline void native_cpuid(unsigned int *eax, unsigned int *ebx,
    unsigned int *ecx, unsigned int *edx)
{
    /* ecx is often an input as well as an output. */

#if !defined(_MSC_VER)

    asm volatile("cpuid"
        : "=a" (*eax),
        "=b" (*ebx),
        "=c" (*ecx),
        "=d" (*edx)
        : "0" (*eax), "2" (*ecx));

#else 
    int registers[4] = {0,0,0,0};

    __cpuidex(registers, *eax, *ecx);
    *eax = registers[0];
    *ebx = registers[1];
    *ecx = registers[2];
    *edx = registers[3];

#endif
}

int main( void )
{
  /* This programm prints some CPUID information and tests the SGX support of the CPU */

  unsigned eax, ebx, ecx, edx;
  eax = 1; /* processor info and feature bits */

  native_cpuid(&eax, &ebx, &ecx, &edx);
  printf("eax: %x ebx: %x ecx: %x edx: %x\n", eax, ebx, ecx, edx);

  printf("stepping %d\n", eax & 0xF); // Bit 3-0
  printf("model %d\n", (eax >> 4) & 0xF); // Bit 7-4
  printf("family %d\n", (eax >> 8) & 0xF); // Bit 11-8
  printf("processor type %d\n", (eax >> 12) & 0x3); // Bit 13-12
  printf("extended model %d\n", (eax >> 16) & 0xF); // Bit 19-16
  printf("extended family %d\n", (eax >> 20) & 0xFF); // Bit 27-20

  // if smx set - SGX global enable is supported
  printf("smx: %d\n", (ecx >> 6) & 1); // CPUID.1:ECX.[bit6]

  /* Extended feature bits (EAX=07H, ECX=0H)*/
  printf("\nExtended feature bits (EAX=07H, ECX=0H)\n");
  eax = 7;
  ecx = 0;
  native_cpuid(&eax, &ebx, &ecx, &edx);
  printf("eax: %x ebx: %x ecx: %x edx: %x\n", eax, ebx, ecx, edx);

  //CPUID.(EAX=07H, ECX=0H):EBX.SGX = 1,
  printf("sgx available: %d\n", (ebx >> 2) & 0x1);

  /* SGX has to be enabled in MSR.IA32_Feature_Control.SGX_Enable
    check with msr-tools: rdmsr -ax 0x3a
    SGX_Enable is Bit 18
    if SGX_Enable = 0 no leaf information will appear. 
     for more information check Intel Docs Architectures-software-developer-system-programming-manual - 35.1 Architectural MSRS
  */    

  /* CPUID Leaf 12H, Sub-Leaf 0 Enumeration of Intel SGX Capabilities (EAX=12H,ECX=0) */
  printf("\nCPUID Leaf 12H, Sub-Leaf 0 of Intel SGX Capabilities (EAX=12H,ECX=0)\n");
  eax = 0x12;
  ecx = 0;
  native_cpuid(&eax, &ebx, &ecx, &edx);
  printf("eax: %x ebx: %x ecx: %x edx: %x\n", eax, ebx, ecx, edx);

  printf("sgx 1 supported: %d\n", eax & 0x1);
    printf("sgx 2 supported: %d\n", (eax >> 1) & 0x1);
  printf("MaxEnclaveSize_Not64: %x\n", edx & 0xFF);
  printf("MaxEnclaveSize_64: %x\n", (edx >> 8) & 0xFF);

  /* CPUID Leaf 12H, Sub-Leaf 1 Enumeration of Intel SGX Capabilities (EAX=12H,ECX=1) */
  printf("\nCPUID Leaf 12H, Sub-Leaf 1 of Intel SGX Capabilities (EAX=12H,ECX=1)\n");
  eax = 0x12;
  ecx = 1;
  native_cpuid(&eax, &ebx, &ecx, &edx);
  printf("eax: %x ebx: %x ecx: %x edx: %x\n", eax, ebx, ecx, edx);


  for ( unsigned i=2; i<10; i++) {
      /* CPUID Leaf 12H, Sub-Leaf i Enumeration of Intel SGX Capabilities (EAX=12H,ECX=i) */
      printf("\nCPUID Leaf 12H, Sub-Leaf %d of Intel SGX Capabilities (EAX=12H,ECX=%d)\n",i,i);
      eax = 0x12;
      ecx = i;
      native_cpuid(&eax, &ebx, &ecx, &edx);
      printf("eax: %x ebx: %x ecx: %x edx: %x\n", eax, ebx, ecx, edx);
  }
}

запуск программы приводит к:

eax: 630f01 ebx: 1040800 ecx: 3e98320b edx: 178bfbff
stepping 1
model 0
family 15
processor type 0
extended model 3
extended family 6
smx: 0

Extended feature bits (EAX=07H, ECX=0H)
eax: 0 ebx: 9 ecx: 0 edx: 0
sgx available: 0

CPUID Leaf 12H, Sub-Leaf 0 of Intel SGX Capabilities (EAX=12H,ECX=0)
eax: 0 ebx: 0 ecx: 0 edx: 0
sgx 1 supported: 0
sgx 2 supported: 0
MaxEnclaveSize_Not64: 0
MaxEnclaveSize_64: 0

CPUID Leaf 12H, Sub-Leaf 1 of Intel SGX Capabilities (EAX=12H,ECX=1)
eax: 0 ebx: 0 ecx: 0 edx: 0

CPUID Leaf 12H, Sub-Leaf 2 of Intel SGX Capabilities (EAX=12H,ECX=2)
eax: 0 ebx: 0 ecx: 0 edx: 0

CPUID Leaf 12H, Sub-Leaf 3 of Intel SGX Capabilities (EAX=12H,ECX=3)
eax: 0 ebx: 0 ecx: 0 edx: 0

CPUID Leaf 12H, Sub-Leaf 4 of Intel SGX Capabilities (EAX=12H,ECX=4)
eax: 0 ebx: 0 ecx: 0 edx: 0

CPUID Leaf 12H, Sub-Leaf 5 of Intel SGX Capabilities (EAX=12H,ECX=5)
eax: 0 ebx: 0 ecx: 0 edx: 0

CPUID Leaf 12H, Sub-Leaf 6 of Intel SGX Capabilities (EAX=12H,ECX=6)
eax: 0 ebx: 0 ecx: 0 edx: 0

CPUID Leaf 12H, Sub-Leaf 7 of Intel SGX Capabilities (EAX=12H,ECX=7)
eax: 0 ebx: 0 ecx: 0 edx: 0

CPUID Leaf 12H, Sub-Leaf 8 of Intel SGX Capabilities (EAX=12H,ECX=8)
eax: 0 ebx: 0 ecx: 0 edx: 0

CPUID Leaf 12H, Sub-Leaf 9 of Intel SGX Capabilities (EAX=12H,ECX=9)
eax: 0 ebx: 0 ecx: 0 edx: 0

это было выполнено на AMD A8-7650k Radeon R7, 10вычислительные ядра 4c + 6g x 4

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...