Compilatoare Intel. De ce au fost necesare compilatoare noi?

Compilatoare Intel C++ și Fortran și biblioteca MKL

Împreună cu compilatoarele standard GNU pentru Linux, compilatoarele Intel C++ și Fortran sunt instalate pe clusterele complexului de calcul NIVC. În prezent (începutul anului 2006), compilatoarele versiunea 9.1 sunt instalate pe toate clusterele. Această pagină este dedicată descrierii celor mai importante opțiuni și setări ale acestor compilatoare, precum și principalele diferențe ale acestora față de compilatoarele GNU. Pagina se adresează în principal utilizatorilor clusterelor MSU Research Computing Center, dar poate fi utilă și altor utilizatori vorbitori de limbă rusă. Problemele legate de compilarea pentru platforma IA-64 nu sunt abordate aici.

De asemenea, biblioteca Intel este instalată pe toate clusterele Biblioteca de matematică Kernel(MKL) versiunea 8.0.2. Biblioteca se află în directorul /usr/mkl. Vă rugăm să rețineți că subdirectoarele 32, 64 și em64t sunt disponibile în directorul lib. Pe clusterul Ant trebuie să utilizați bibliotecile din subdirectorul em64t, iar pe alte clustere - din subdirectorul 32. Toată documentația și exemplele necesare pot fi obținute din directorul /usr/mkl/doc.

De ce au fost necesare compilatoare noi?

Nevoia de compilatoare noi a apărut în principal pentru a) să susțină programarea în Fortran 90 și, de asemenea, b) pentru o optimizare mai puternică a programelor Fortran decât este oferită de compilatorul g77, care folosește traducerea în C și apoi compilarea folosind gcc.

Compilatoarele PGI (Portland Group) îndeplinesc și aceste cerințe, dar compania de dezvoltare a refuzat să le furnizeze Rusiei.

Cum se utilizează?

Compilatoarele Intel sunt invocate folosind comenzi icc(C sau C++), icpc(C++) și ifort(Fortran 77/90). Comenzile mpicc, mpiCC și mpif77 pentru compilarea și asamblarea programelor MPI sunt, de asemenea, configurate pentru a utiliza compilatoare Intel.

De asemenea, este posibil să utilizați compilatoare GNU folosind comenzile mpigcc, mpig++ și mpig77 (Fortran 90 nu este acceptat).

Fișiere de intrare

În mod implicit, fișierele cu extensia .cppȘi .cxx sunt considerate texte sursă în limbajul C++, fișiere cu extensia .c- Cod sursă C, iar compilatorul icpc compilează și fișiere .c ca cod sursă C++.

Fișiere cu extensii .f, .ftnȘi .pentru sunt recunoscute ca texte sursă în limba Fotran, cu o formă fixă ​​de notație, și fișierele .fppȘi .F a trecut în plus prin preprocesorul limbajului Fortran. Fișiere cu extensia .f90 sunt considerate texte sursă Fortran 90/95 cu notație în formă liberă. Puteți specifica în mod explicit o formă fixă ​​sau liberă de notație pentru programele Fortran folosind opțiunile -FIȘi -FR respectiv.

Fișiere cu extensia .s recunoscut ca cod de limbaj de asamblare pentru IA-32.

Caracteristici ale compilatorului Intel

Aici vă prezentăm caracteristicile compilatoarelor Intel, așa cum sunt menționate de dezvoltator în manualul de utilizare, cu câteva dintre comentariile noastre.

  • Optimizare semnificativă
    Aparent, asta înseamnă optimizarea codului la un nivel înalt, adică. în primul rând, diverse transformări de buclă, pe care aproape toți compilatoarele le fac cu mai mult sau mai puțin succes
  • Optimizare în virgulă mobilă
    Aparent, asta înseamnă, în primul rând, utilizarea maximă a comenzilor implementate la nivel hardware
  • Optimizări interprocedurale
    acestea. optimizarea globală a întregului program, spre deosebire de optimizarea obișnuită, care afectează doar codul funcțiilor specifice
  • Optimizare bazată pe profil
    acestea. capacitatea de a rula un program în modul de testare, de a colecta date despre timpul necesar pentru a trece anumite fragmente de cod în cadrul funcțiilor utilizate frecvent și apoi de a utiliza aceste date pentru optimizare
  • Suport pentru setul de instrucțiuni SSE în procesoarele Pentium III
    notă: pentru sarcinile de calcul, comenzile SSE2 prezintă un interes mai mare, adică. comenzi vectoriale peste numere reale pe 64 de biți, dar sunt acceptate doar pe procesoarele Pentium 4, pe care nu le avem încă la dispoziție
  • Vectorizare automată
    acestea. din nou, folosind comenzile SSE și SSE2, introduse automat de compilator
  • Suport OpenMP pentru programare pe sisteme SMP
    notă: pe un cluster se recomandă utilizarea în primul rând a interfeței MPI; utilizarea pe scară largă a OpenMP pe cluster nu este de așteptat și astfel de experimente nu au fost încă efectuate; dar probabil că are sens să folosești biblioteci (BLAS, etc.) care sunt paralelizate pentru memoria partajată.
  • Preîncărcarea datelor
    acestea. Aparent, utilizarea comenzilor de preîncărcare din memorie în memoria cache de date, care va fi necesară după ceva timp
  • Cod „Dispatching” pentru diferite procesoare
    acestea. capacitatea de a genera cod pentru diferite procesoare într-un singur fișier executabil, ceea ce vă permite să profitați de acesta cele mai noi procesoare pentru a obține cele mai înalte performanțe pe acestea, menținând în același timp compatibilitatea binară a programelor cu procesoarele anterioare; Pe clusterul nostru acest lucru nu este încă relevant, deoarece sunt folosite doar procesoare Pentium III, iar programele compilate pe cluster nu trebuie să fie transferate și rulate pe alte mașini

Opțiuni de bază ale compilatorului

Cele mai interesante, desigur, sunt opțiunile de optimizare a codului. Majoritatea opțiunilor sunt comune pentru compilatoarele C++ și Fortran. Mai mult descriere detaliata opțiunile din manualele de utilizare în limba engleză.

Niveluri de optimizare
OpțiuneDescriere
-O0Dezactivează optimizarea
-O1 sau -O2Optimizare de bază pentru viteză. Inserarea în linie a funcțiilor bibliotecii este dezactivată. Pentru compilatorul C++, aceste opțiuni oferă aceeași optimizare; pentru compilatorul Fortran, opțiunea -O2 este de preferat, deoarece include și promovarea ciclului.
-O3Optimizări mai puternice, inclusiv transformări în buclă, preîncărcarea datelor și utilizarea OpenMP. Este posibil ca unele programe să nu garanteze o performanță îmbunătățită în comparație cu -O2. Are sens să fie utilizat împreună cu opțiunile de vectorizare -xKȘi -xW.
-unroll[n]Permite derularea buclei de până la n ori.
Optimizări pentru un anumit procesor
OpțiuneDescriere
-tpp6Optimizare pentru procesoare Penitum Pro, Pentium II și Pentium III
-tpp7Optimizare pentru procesoare Penitum 4 (această opțiune este activată implicit pentru compilatorul IA-32)
-xMGenerarea codului folosind extensii MMX specifice procesoarelor Pentium MMX, Pentium II și ulterioare
-xKGenerarea codului folosind extensii SSE specifice procesoarelor Pentium III
-xWGenerarea codului folosind extensii SSE2 specifice procesoarelor Pentium 4
Optimizare interprocedurală
-ipOptimizarea interprocedurală este activată într-un singur fișier. Dacă specificați opțiunea -ip_no_inlining, atunci inserările de funcții inline sunt dezactivate.
-ipoPermite optimizarea interprocedurală între diferite fișiere
Optimizări folosind profile
-prof_genSe generează un cod de „profilare” care va fi folosit pentru profilare, adică. culegerea de date cu privire la frecvenţa de trecere a anumitor locuri din program
-prof_useOptimizarea se realizează pe baza datelor obținute în etapa de profilare. Este logic să îl utilizați împreună cu opțiunea de optimizare interprocedurală -ipo.
Paralelizare pentru sisteme SMP
-openmpActivează suportul pentru standardul OpenMP 2.0
-paralelParalelizarea automată a buclei este activată

Performanţă

Conform rezultatelor rulării testelor SPEC CPU2000, publicate pe serverul ixbt.com, compilatoarele Intel versiunea 6.0 au fost aproape universal mai bune în comparație cu versiunile compilatoarelor gcc 2.95.3, 2.96 și 3.1 și versiunea PGI 4.0.2. Aceste teste au fost efectuate în 2002 pe un computer cu procesor Pentium 4/1,7 GHz și RedHat Linux 7.3.

Conform testelor efectuate de Polyhedron, versiunea 7.0 a compilatorului Intel Fortran a fost aproape universal superioară altor compilatoare Fortran 77 pentru Linux (Absoft, GNU, Lahey, NAG, NAS, PGI). Doar în unele teste, compilatorul Intel este ușor inferior compilatoarelor Absoft, NAG și Lahey. Aceste teste au fost efectuate pe un computer cu procesor Pentium 4/1.8 GHz și Mandrake Linux 8.1.

Compilatoarele Intel versiunea 9.1 depășesc, de asemenea, compilatoarele gcc și arată performanțe comparabile cu Absoft, PathScale și PGI.

Le vom fi recunoscători acelor utilizatori și cititori care ne trimit date despre impactul alegerii compilatorului (GCC sau Intel) și opțiunile de optimizare asupra vitezei de lucru asupra problemelor lor din viața reală.

Biblioteci

Compilatorul limbajului C folosește o bibliotecă de rulare dezvoltată în cadrul proiectului GNU ( libc.a).

Următoarele biblioteci sunt furnizate împreună cu compilatorul Intel C++:

  • libcprts.a- biblioteca de limbaj C++ runtime dezvoltată de Dinkumware.
  • libcxa.a- bibliotecă de rulare suplimentară pentru dezvoltarea C++ de către Intel.
  • libimf.a- o bibliotecă de funcții matematice dezvoltată de Intel, care include implementări optimizate și de înaltă precizie ale funcțiilor trigonometrice, hiperbolice, exponențiale, speciale, complexe și alte funcții (pentru mai multe detalii, vezi lista de funcții).
  • libirc.a- suport runtime pentru profilare (PGO) și trimitere de cod în funcție de procesor (vezi mai sus).
  • libguide.a- Implementarea OpenMP.

Această listă conține biblioteci statice, dar pentru majoritatea dintre ele există și unele dinamice, de exemplu. opțiuni conectate în timpul pornirii ( .asa de).

Următoarele biblioteci sunt furnizate împreună cu compilatorul Fortran: libCEPCF90.a, libIEPCF90.a, libintrine.a, libF90.a, se folosește și biblioteca de funcții matematice libimf.a.

Construirea fișierului executabil

Bibliotecile pot fi conectate static (în timpul construirii) sau dinamic (în timpul pornirii programului). Abordarea dinamică vă permite să reduceți dimensiunea fișierului executabil și vă permite să partajați aceeași copie a bibliotecii în memorie, dar pentru aceasta trebuie să instalați un set complet de biblioteci dinamice utilizate pe fiecare nod unde vor fi rulate programele .

Astfel, dacă ați instalat compilatorul Intel pe mașina dvs. Linux și doriți să rulați fișierele executabile compilate pe alte mașini, atunci trebuie fie să utilizați o construcție statică (ceea ce este mai ușor), fie să copiați bibliotecile dinamice Intel pe aceste mașini (de obicei de la un director precum /opt/intel /compiler70/ia32/lib) la unul dintre directoarele enumerate în fișierul /etc/ld.so.conf și, de asemenea, asigurați-vă că același set de biblioteci dinamice GNU/Linux sunt instalate pe aceste mașini .

În mod implicit, toate bibliotecile de dezvoltare Intel (cu excepția libcxa.so) sunt legate static, iar toate bibliotecile de sistem Linux și bibliotecile GNU sunt legate dinamic. Folosind opțiunea -static puteți forța colectorul (editor de linkuri) să conecteze toate bibliotecile în mod static (ceea ce va crește volumul fisier executabil), și folosind opțiunea -i_dinamic Puteți conecta în mod dinamic toate bibliotecile de dezvoltare Intel.

Când conectați biblioteci suplimentare folosind opțiunea de vizualizare -biblioteca poate fi necesar să utilizați opțiunea -Ldirector pentru a specifica calea unde se află bibliotecile.

Utilizarea opțiunilor -BstaticȘi -Bdinamic puteți specifica în mod explicit conexiunea dinamică sau statică a fiecăreia dintre bibliotecile specificate în Linie de comanda.

Folosind opțiunea -c asamblarea fișierului executabil este dezactivată și se realizează numai compilarea (generarea modulului obiect).

Partajarea modulelor în Fortran și C

Pentru a partaja modulele scrise în Fortran și C, trebuie să fiți de acord cu privire la denumirea procedurilor în modulele obiect, transmiterea parametrilor și accesul la variabile globale, dacă există.

În mod implicit, compilatorul Intel Fortran convertește numele procedurilor în minuscule și adaugă un caracter de subliniere la sfârșitul numelui. Compilatorul C nu schimbă niciodată numele funcțiilor. Astfel, dacă vrem să apelăm o funcție sau procedură FNNAME implementată în C dintr-un modul Fortran, atunci în modulul C ar trebui să se numească fnname_.

Compilatorul Fortran acceptă opțiunea -nus [nume fișier], care vă permite să dezactivați adăugarea de liniuțe de subliniere la numele procedurilor interne. Dacă este specificat un nume de fișier, acest lucru se face numai pentru numele procedurilor listate în fișierul specificat.

În mod implicit, în Fortran parametrii sunt trecuți prin referință, iar în C sunt transmisi întotdeauna după valoare. Astfel, atunci când apelăm o procedură Fortran dintr-un modul C, trebuie să trecem pointeri către variabilele corespunzătoare care conțin valorile parametrilor actuali ca parametri. Când scriem o funcție în C care va trebui apelată dintr-un modul Fortran, trebuie să descriem parametrii formali ca pointeri către tipurile corespunzătoare.

În modulele C, este posibil să utilizați blocuri COMUNE definite în modulele Fortran (pentru mai multe informații, consultați Ghidul utilizatorului Intel Fortran Compiler, capitolul Amestecarea C și Fortran).

Partajarea compilatoarelor Intel și GCC

Modulele obiect C produse de compilatorul Intel C++ sunt compatibile cu modulele produse de compilatorul GCC și biblioteca GNU C. Astfel, aceste module pot fi folosite împreună într-un singur program compilat folosind comenzile icc sau gcc, dar se recomandă utilizarea icc pentru a include corect bibliotecile Intel.

Compilatorul Intel acceptă o serie de extensii de limbaj C non-standard utilizate de proiectul GNU și susținute de compilatorul GCC (dar nu toate, vezi aici pentru mai multe detalii).

Manualul de utilizare nu spune nimic despre compatibilitatea modulelor obiect în limbajele C++ și Fortran; aparent, nu este acceptat.

Suport pentru standarde

Intel C++ Compiler 7.0 pentru Linux acceptă standardul de limbaj ANSI/ISO C (ISO/IEC 9899/1990). Este posibil să se stabilească o compatibilitate strictă cu standardul ANSI C ( -ansi) sau dialect ANSI C extins ( -Xa). Când utilizați opțiunea -c99

  • Manuale pentru compilator în format HTML (disponibil „online” pe serverul nostru, dar necesită suport pentru limbajul Java)
    • Ghidul utilizatorului Intel C++ Compiler.
    • Ghidul utilizatorului Intel Fortran Compiler.
  • Manuale compilatorului pentru Limba englezăîn format PDF (necesită Acrobat Reader, trebuie să descărcați fișiere PDF pe computer)
    • Ghidul utilizatorului Intel C++ Compiler: Ghidul utilizatorului Intel C++ Compiler (1,3 MB, 395 pagini).
    • Ghidul utilizatorului Intel Fortran Compiler: Ghidul utilizatorului Intel Fortran Compiler (1,1 MB, 285 pagini).
    • Referință pentru programator în Fortran: Referință pentru programator Intel Fortran (7 MB, 566 de pagini).
    • Referințe la biblioteci pentru limbajul Fortran: Intel Fortran Libraries Reference Manual (9,5 MB, 881 de pagini).
  • Ghid Intel Application Debugger.
  • Comparația compilatoarelor pe testele SPEC CPU2000 (articol pe ixbt.com în rusă).
  • Site-ul web Polyhedron prezintă rezultate de comparație între diferiți compilatori.
  • În numărul precedent al revistei, am discutat despre produse din familia Intel VTune Performance Analyzer - instrumente de analiză a performanței care sunt meritat populare printre dezvoltatorii de aplicații și permit detectarea în cod. aplicații pentru echipă, care risipesc prea multe resurse CPU, oferind dezvoltatorilor posibilitatea de a identifica și elimina potențialul locuri înguste, asociat cu secțiuni similare de cod, accelerând astfel procesul de dezvoltare a aplicației. Rețineți, totuși, că performanța aplicațiilor depinde în mare măsură de cât de eficiente sunt compilatoarele utilizate în dezvoltarea lor și de ce caracteristici hardware sunt folosite la generarea codului mașinii.

    Cele mai recente versiuni ale compilatoarelor Intel Intel C++ și Intel Fortran pentru Windows și Linux vă permit să obțineți beneficii de performanță a aplicațiilor pentru sistemele bazate pe procesoare Intel Itanium 2, Intel Xeon și Intel Pentium 4 până la 40% în comparație cu compilatoarele existente de la alți producători, datorită utilizării unor caracteristici ale acestor procesoare precum tehnologia Hyper-Threading.

    Diferențele asociate cu optimizarea codului de către această familie de compilatoare includ utilizarea unei stive pentru efectuarea de operațiuni în virgulă mobilă, optimizarea interprocedurală (IPO), optimizarea în conformitate cu profilul aplicației (Profile Guided Optimization (PGO), preîncărcarea datelor în cache ( Preluarea datelor), care evită latența asociată cu accesul la memorie, suport pentru caracteristicile procesoarelor Intel (de exemplu, extensii pentru procesarea datelor în flux Intel Streaming SIMD Extensions 2, caracteristică pentru Intel Pentium 4), paralelizarea automată a execuției codului, aplicație creație, rulând pe mai multe tipuri diferite procesoare la optimizarea pentru unul dintre ele, instrumente pentru „predicția” codului ulterior (predicția de ramuri), suport extins pentru lucrul cu fire de execuție.

    Rețineți că compilatoarele Intel sunt utilizate în companii cunoscute precum Alias/Wavefront, Oracle, Fujitsu Siemens, ABAQUS, Silicon Graphics, IBM. Conform testelor independente efectuate de un număr de companii, performanța compilatoarelor Intel este semnificativ mai mare decât performanța compilatoarelor de la alți producători (a se vedea, de exemplu, http://intel.com/software/products/compilers/techtopics/compiler_gnu_perf .pdf).

    Mai jos vom analiza câteva caracteristici ultimele versiuni Compilatoare Intel pentru desktop și server sisteme de operare.

    Compilatoare pentru platforma Microsoft Windows

    Intel C++ Compiler 7.1 pentru Windows

    Intel C++ Compiler 7.1 este un compilator lansat la începutul acestui an care oferă cod foarte optimizat pentru procesoarele Intel Itanium, Intel Itanium 2, Intel Pentium 4 și Intel Xeon, precum și procesorul Intel Pentium M care utilizează tehnologia Intel Centrino și este destinat utilizării în dispozitive mobile.

    Compilatorul specificat este pe deplin compatibil cu instrumentele de dezvoltare Microsoft Visual C++ 6.0 și Microsoft Visual Studio .NET: poate fi integrat în mediile de dezvoltare corespunzătoare.

    Acest compilator acceptă standardele ANSI și ISO C/C++.

    Intel Fortran Compiler 7.1 pentru Windows

    Intel Fortran Compiler 7.1 pentru Windows, lansat și la începutul acestui an, vă permite să creați cod optimizat pentru procesoarele Intel Itanium, Intel Itanium 2, Intel Pentium 4 și Intel Xeon, Intel Pentium M.

    Acest compilator este pe deplin compatibil cu instrumentele de dezvoltare Microsoft Visual C++ 6.0 și Microsoft Visual Studio .NET, adică poate fi integrat în mediile de dezvoltare corespunzătoare. În plus, acest compilator vă permite să dezvoltați aplicații pe 64 de biți pentru sistemele de operare care rulează pe procesoare Itanium/Itanium 2 folosind Microsoft Visual Studio pe un procesor Pentium pe 32 de biți utilizând compilatorul Intel Fortran pe 64 de biți. Când depanați codul, acest compilator vă permite să utilizați un depanator platformele Microsoft.NET.

    Dacă aveți instalat produsul Compaq, Visual Fortran 6.6 poate fi utilizat în locul celui original Intel Fortran Compiler 7.1, deoarece aceste compilatoare sunt compatibile la nivel cod sursa.

    Intel Fortran Compiler 7.1 pentru Windows este pe deplin compatibil cu standardul ISO Fortran 95 și acceptă crearea și depanarea aplicațiilor care conțin cod în două limbi: C și Fortran.

    Compilatoare pentru platforma Linux

    Intel C++ Compiler 7.1 pentru Linux

    Un alt compilator care a fost lansat la începutul anului, Intel C++ Compiler 7.1 pentru Linux, vă permite să obțineți un grad ridicat de optimizare a codului pentru procesoarele Intel Itanium, Intel Itanium 2, Intel Pentium 4, Intel Pentium M. Acest compilator este complet compatibil cu compilatorul GNU C la codul sursă și modulele obiect, ceea ce vă permite să migrați aplicațiile create folosind GNU C către acesta fără costuri suplimentare.Compilatorul Intel C++ acceptă C++ ABI (o completare la kernel-ul Linux care vă permite să rulați sub control Linux cod compilat pentru alte platforme, cum ar fi primele sisteme de operare SCO, versiuni timpurii Sun Solaris etc.), ceea ce înseamnă compatibilitate deplină cu compilatorul gcc 3.2 la nivel de cod binar. În cele din urmă, cu Intel C++ Compiler 7.1 pentru Linux, puteți chiar să recompilați nucleul Linux făcând câteva modificări minore la codul sursă.

    Intel Fortran Compiler 7.1 pentru Linux

    Intel Fortran Compiler 7.1 pentru Linux vă permite să creați cod optimizat pentru procesoarele Intel Itanium, Intel Itanium 2, Intel Pentium 4, Intel Pentium M. Acest compilator este pe deplin compatibil cu compilatorul Compaq Visual Fortran 6.6 la nivel de cod sursă, permițându-vă să recompilați aplicațiile folosindu-le create folosind Compaq Visual Fortran, crescându-le astfel performanța.

    În plus, compilatorul specificat este compatibil cu astfel de utilitare utilizate de dezvoltatori precum editorul emacs, depanatorul gdb și utilitarul make application build.

    Ca și versiunea pentru Windows a acestui compilator, Intel Fortran Compiler 7.1 pentru Linux este pe deplin compatibil cu standardul ISO Fortran 95 și acceptă crearea și depanarea aplicațiilor care conțin cod în două limbi: C și Fortran.

    Trebuie subliniat în special faptul că o contribuție semnificativă la crearea compilatoarelor Intel listate a fost adusă de specialiștii de la Centrul de dezvoltare software din Rusia Intel din Nijni Novgorod. Mai mult informatii detaliate Informații despre compilatoarele Intel pot fi găsite pe site-ul Web Intel la www.intel.com/software/products/.

    A doua parte a acestui articol va fi dedicată compilatoarelor Intel care creează aplicații pentru dispozitive mobile.

    Exemple de hack-uri reale: Intel C++ 7.0 Compiler - Arhiva WASM.RU

    ...compilatorul Intel C++ 7.0 a fost descărcat noaptea târziu, pe la cinci dimineața. Îmi doream foarte mult să dorm, dar mă sfâșia și curiozitatea: dacă protecția fusese întărită sau nu. Hotărând că până nu îmi dau seama de protecția pe care încă nu voi adormi, am deschis noua consola, și resetarea variabilelor de sistem TEMP și TMP în directorul C:\TEMP, tastate în grabă indecent nume lung instalatorul W_CC_P_7.0.073.exe pe linia de comandă (necesitatea de a seta variabilele TEMP și TMP se explică prin faptul că în Windows 2000 ele indică implicit către un director foarte profund imbricat, iar programul de instalare Intel C++ - și nu numai acesta - nu suportă căi de o dimensiune atât de mare).

    Imediat a devenit clar că politica de protecție a fost revizuită radical și acum a fost verificată prezența unei licențe deja în etapa de instalare a programului (în versiunea 5.x instalarea s-a efectuat fără probleme). OK, dăm comanda dir și ne uităm la conținutul cu care trebuie să luptăm acum:

      Conținutul folderului C:\TMP\IntelC++Compiler70

      17.03.2003 05:10

      html

      17.03.2003 05:11

      x86

      17.03.2003 05:11

      Itanium

      17.03.2003 05:11

      note

      06/05/2002 10:35 45 056 AutoRun.exe

      07/10/2001 12:56 27 autorun.inf

      29.10.2002 11:25 2 831 ccompindex.htm

      24.10.2002 08:12 126 976 ChkLic.dll

      18.10.2002 22:37 552 960 chklic.exe

      17.10.2002 16:29 28 663 CLicense.rtf

      17.10.2002 16:35 386 credit.txt

      16.10.2002 17:02 34 136 Crellnotes.htm

      19.03.2002 14:28 4 635 PLSuite.htm

      21.02.2002 12:39 2 478 register.htm

      02.10.2002 14:51 40 960 Setup.exe

      02.10.2002 10:40 151 Setup.ini

      07/10/2001 12:56 184 setup.mwg

      19 fișiere 2.519.238 octeți

      6 foldere 886.571.008 octeți liberi

    Da! Programul de instalare setup.exe durează doar patruzeci de kiloocteți. Foarte bun! Este puțin probabil să puteți ascunde o protecție serioasă într-un astfel de volum și, chiar dacă da, acest fișier minuscul nu merită nimic de analizat în întregime - până la ultimul octet al listei de dezasamblare. Cu toate acestea, nu este un fapt că cod de securitate situat exact în setup.exe, poate fi localizat în alt loc, de exemplu... ChkLic.dll/ChkLic.exe, care împreună ocupă puțin mai puțin de șapte sute de kiloocteți. Stai, ce este ChkLic? Este aceasta prescurtare pentru Check License sau ce?! Hmm, băieții de la Intel, evident, au probleme serioase cu simțul umorului. Ar fi mai bine dacă ar numi acest fișier „Hack Me” sincer! Bine, judecând după volum, ChkLic este același FLEX lm și l-am întâlnit deja (vezi „Compilatorul Intel C++ 5.0”) și avem o idee aproximativă despre cum să-l spargem.

    Dăm comanda „dumpbin /EXPORTS ChkLic.dll” pentru a examina funcțiile exportate și... țineți-l strâns de Klava pentru a nu cădea de pe scaun:

      Descarcarea fișierului ChkLic.dll

    1. Secțiunea conține următoarele exporturi pentru ChkLic.dll

      0 caracteristici

      3DB438B4 ștampila datei oră Luni 21 octombrie 21:26:12 2002

    2. 1 număr de funcții

      1 număr de nume

      indiciu ordinal nume RVA

      1 0 000010A0 _CheckValidLicense

    La naiba! Protecția exportă doar o singură funcție cu minunatul nume CheckValidLicense. „Minunat” - deoarece scopul funcției devine clar din numele ei și devine posibil să se evite analiza minuțioasă a codului de dezasamblare. Ei bine, și-au pierdut orice interes... ar fi mai bine să-l exporte în mod obișnuit sau așa ceva, sau cel puțin să-l boteze cu un fel de nume intimidant precum DES Decrypt.

    ...visând cu ochii deschiși! Bine, să ne întoarcem la oile noastre. Să ne gândim logic: dacă tot codul de securitate este concentrat direct în ChkLic.dll (și, judecând după natura „articulată” a protecției, acesta este într-adevăr cazul), atunci toată „protecția” se reduce la apelarea CheckValidLicense din Setup. exe și verificând rezultatul returnat de acesta. Prin urmare, pentru a „hack” este suficient să pierdeți ChkLic.dll, forțând funcția ChekValidLicense să revină mereu... și, apropo, ce ar trebui să returneze? Mai exact: care este mai exact valoarea returnată care corespunde unei verificări reușite a licenței? Nu, nu vă grăbiți să dezasamblați setup.exe pentru a-l determina, pentru că opțiuni posibile nu mai mult: ori FALS ori ADEVĂRAT. Pariezi pe TRUE? Ei bine, într-un fel, acest lucru este logic, dar pe de altă parte: de ce am decis de fapt că funcția CheckValidLicense returnează exact steagul succesului operațiunii, și nu codul de eroare? La urma urmei, trebuie să motiveze cumva motivele refuzului de a instala compilatorul: fișierul cu licența nu a fost găsit, fișierul este deteriorat, licența a expirat și așa mai departe? Bine, să încercăm să returnăm zero, iar dacă asta nu funcționează, vom returna unul.

    OK, pune-ți centura, hai să mergem! Lansăm HIEW, deschidem fișierul ChkLic.dll (dacă nu se deschide, amintiți-vă de gophers de trei ori, copiați-l temporar în rădăcină sau în orice alt director care nu conține caractere speciale în numele său care nu le plac lui hiew) Apoi, revenind din nou la tabelul de export obtinut folosind dumpbin, determinăm adresa funcției CheckValidLicense (în acest caz 010A0h) și prin „10A0” trecem la începutul acesteia. Acum, o tăiem „live”, suprascriind peste cod vechi „XOR EAX, EAX/RETN 4". De ce exact „REN 4” și nu doar „RET”? Da, deoarece funcția acceptă convenția stdcall, pe care o puteți afla uitându-se la epilogul său în HIEW"e ( doar derulați în jos ecranul dezasamblatorului până când vă întâlniți cu RET).

    Hai sa verificam... Functioneaza!!! În ciuda lipsei unei licențe, instalatorul începe instalarea fără a pune întrebări! Prin urmare, apărarea a căzut. Oh, nu ne vine să credem că totul este atât de simplu și, pentru a nu sta prost uitându-ne la monitor așteptând finalizarea procesului de instalare a programului, folosim dezasamblatorul nostru preferat IDA pe setup.exe. Primul lucru care vă atrage atenția este absența CheckValidLicense în lista de funcții importate. Poate lansează cumva fișierul ChkLic.exe? Încercăm să găsim legătura corespunzătoare printre liniile recunoscute automat: „~View aNames”, „ChkLic”... da, linia „Chklic.exe” nu există deloc, dar „Chklic.dll” este detectată. Da, văd, asta înseamnă că biblioteca ChkLic este încărcată printr-o legătură explicită prin LoadLibrary. Și în urma referințelor încrucișate confirmă acest lucru:

      Text:0040175D push offset aChklic_dll ; lpLibFileName

      Text:00401762 apel ds:LoadLibraryA

      Text:00401762; încărcați ChkLic.dll ^^^^^^^^^^^^^^^^^^

      Text:00401762;

      Text:00401768 mov esi, eax

      Text:0040176A push offset a_checkvalidlic ; lpProcName

      Text:0040176F push esi ; hModul

      Text:00401770 apel ds:GetProcAddress

      Text:00401770; obțineți adresa funcției CheckValidLicense

      Text:00401770;

      Text:00401776 cmp esi, ebx

      Text:00401778 jz loc_40192E

      Text:00401778; dacă nu există o astfel de bibliotecă, atunci ieșiți din programul de instalare

      Text:00401778;

      Text:0040177E cmp eax, ebx

      Text:00401780 jz loc_40192E

      Text:00401780; dacă nu există o astfel de funcție în bibliotecă, atunci părăsiți instalarea

      Text:00401780;

      Text: 00401786 push ebx

      Text: 00401787 apel eax

      Text:00401787; apelați funcția ChekValidLicense

      Text:00401787;

      Text:00401789 test eax, eax

      Text:0040178B jnz loc_4019A3

    Text:0040178; dacă funcția a returnat diferit de zero, atunci ieșiți din programul de instalare

    Incredibil, această apărare teribil de primitivă este construită exact așa! Mai mult decât atât, fișierul de jumătate de metru ChkLic.exe nu este deloc necesar! Și de ce a meritat să-l tragi de pe Internet? Apropo, dacă decizi să salvezi distribuția compilatorului (atenție: nu am spus „distribuie”!), atunci pentru a economisi spațiu pe disc, ChkLic.* poate fi șters: fie ștergând setup.exe, înțărcându-l pentru totdeauna de la accesându-le sau pur și simplu creând propriul dvs. ChkLic.dll, exportând funcția stdcall CheckValidLicence de forma: int CheckValidLicence(int some_flag) ( return 0;)

    Ei bine, în timp ce discutam despre toate acestea, programul de instalare a terminat de instalat compilatorul și și-a încheiat cu succes munca. Este interesant dacă compilatorul va începe sau toată distracția abia începe? Coborâm febril în ierarhia ramificată a subfolderelor, găsim icl.exe, care, așa cum s-ar fi de așteptat, se află în directorul bin, facem clic și... Desigur, compilatorul nu pornește, invocând faptul că „icl: error: nu a putut verifica licența FLEX lm", fără de care nu își poate continua munca.

    Se pare că Intel a folosit protecție pe mai multe niveluri, iar primul nivel s-a dovedit a fi o protecție brută împotriva proștilor. Bine! Acceptăm această provocare și, pe baza experienței noastre anterioare, căutăm automat fișierul LMGR*.DLL în directorul compilatorului. Inutil! De data aceasta nu există un astfel de fișier aici, dar se dovedește că icl.exe s-a îngrășat foarte mult, depășind marca de șase sute de kilobyți... Stop! Dezvoltatorii compilatorului nu au legat același FLEX lm cu legături statice? Să vedem: în Intel C++ 5.0, suma dimensiunilor lmgr327.dll și icl.exe a fost de 598 KB, iar acum doar icl.exe ocupă 684 KB. Luând în considerare ajustarea pentru „obezitatea naturală” senilă, cifrele sunt de acord foarte bine. Deci, la urma urmei, FLEX lm! Oh oh! Dar acum, fără nume de funcții simbolice, va fi mult mai dificil să spargi protecția... Totuși, să nu intrăm în panică înainte de timp! Să ne gândim, doar calm! Este puțin probabil ca echipa de dezvoltare să rescrie complet tot codul care interacționează cu această protecție „plic”. Cel mai probabil, „îmbunătățirea” sa s-a încheiat doar cu o schimbare a tipului de aspect. Și dacă da, atunci șansele de a pirata programul sunt încă mari!

    Amintindu-ne că ultima dată când codul de securitate a fost în funcția principală, noi, după ce i-am determinat adresa, am stabilit pur și simplu un punct de întrerupere și, așteptând să apară depanatorul, urmărim prost codul, uitându-ne alternativ la depanator, apoi la ieșirea programului. fereastra: a aparut Exista un mesaj improrogativ? În același timp, notăm toate tranzițiile condiționate pe care le întâlnim pe o coală separată (sau o punem în propria memorie, dacă doriți), fără a uita să indicăm dacă fiecare tranziție condiționată a fost efectuată sau nu... Stop! Tu și cu mine discutam despre ceva, dar deja a apărut un mesaj abuziv! OK, bine! Să vedem ce tranziție condiționată îi corespundea. Înregistrările noastre arată că ultimul salt întâlnit a fost saltul condiționat JNZ, situat la adresa 0401075h și care „reacționează” la rezultatul returnat de sub_404C0E:

  • Text:0040107F loc_40107F: ; COD XREF: _main+75^j

    Text:0040107F mov eax, offset aFfrps ; "FFrps"

    Text:00401084 mov edx, 21h

    Text: 00401089 apel sub_404C0E

    Text:0040108E test eax, eax

    Text:00401090 jnz scurt loc_40109A

    Evident, sub_404C0E este procedura de protecție care verifică prezența licenței. Cum să o păcălesc? Ei bine, există multe opțiuni... În primul rând, puteți analiza cu atenție și scrupulos conținutul sub_404C0E pentru a afla ce anume verifică și cum exact verifică. În al doilea rând, puteți înlocui pur și simplu JNZ short loc_40107F cu JZ short loc_40107F sau chiar NOP, NOP. În al treilea rând, comanda de verificare a rezultatului returnat TEST EAX, EAX poate fi transformată într-o comandă zero: XOR EAX, EAX. În al patrulea rând, puteți face sub_404C0E să dispară, astfel încât să returneze întotdeauna zero. Nu știu despre tine, dar cel mai mult mi-a plăcut metoda numărul trei. Schimbăm doi octeți și lansăm compilatorul. Dacă nu există alte verificări ale „licențelor” sale în protecție, atunci programul va funcționa și, în consecință, invers. (După cum ne amintim, în cea de-a cincea versiune au existat două astfel de verificări). În mod uimitor, compilatorul nu se mai plânge și funcționează!!! Într-adevăr, așa cum era de așteptat, dezvoltatorii săi nu au întărit deloc protecția, ci, dimpotrivă, chiar au slăbit-o! Chris Kaspersky

  • Nu ești un sclav!
    Curs educațional închis pentru copiii de elită: „Adevăratul aranjament al lumii”.
    http://noslave.org

    Material de pe Wikipedia - enciclopedia liberă

    Compilator Intel C++
    Eroare Lua în Modulul:Wikidata pe linia 170: încercați să indexați câmpul „wikibase” (o valoare zero).
    Tip
    Autor

    Eroare Lua în Modulul:Wikidata pe linia 170: încercați să indexați câmpul „wikibase” (o valoare zero).

    Dezvoltator
    Dezvoltatori

    Eroare Lua în Modulul:Wikidata pe linia 170: încercați să indexați câmpul „wikibase” (o valoare zero).

    Scris pe

    Eroare Lua în Modulul:Wikidata pe linia 170: încercați să indexați câmpul „wikibase” (o valoare zero).

    Interfață

    Eroare Lua în Modulul:Wikidata pe linia 170: încercați să indexați câmpul „wikibase” (o valoare zero).

    sistem de operare
    Limbi de interfață

    Eroare Lua în Modulul:Wikidata pe linia 170: încercați să indexați câmpul „wikibase” (o valoare zero).

    Prima editie

    Eroare Lua în Modulul:Wikidata pe linia 170: încercați să indexați câmpul „wikibase” (o valoare zero).

    Platformă hardware
    Ultima versiune
    Eliberarea candidatului

    Eroare Lua în Modulul:Wikidata pe linia 170: încercați să indexați câmpul „wikibase” (o valoare zero).

    Versiune beta

    Eroare Lua în Modulul:Wikidata pe linia 170: încercați să indexați câmpul „wikibase” (o valoare zero).

    Versiunea alfa

    Eroare Lua în Modulul:Wikidata pe linia 170: încercați să indexați câmpul „wikibase” (o valoare zero).

    Versiune de testare

    Eroare Lua în Modulul:Wikidata pe linia 170: încercați să indexați câmpul „wikibase” (o valoare zero).

    Formate de fișiere care pot fi citite

    Eroare Lua în Modulul:Wikidata pe linia 170: încercați să indexați câmpul „wikibase” (o valoare zero).

    Formate de fișiere generate

    Eroare Lua în Modulul:Wikidata pe linia 170: încercați să indexați câmpul „wikibase” (o valoare zero).

    Stat

    Eroare Lua în Modulul:Wikidata pe linia 170: încercați să indexați câmpul „wikibase” (o valoare zero).

    Licență

    Caracteristici principale:

    • Vectorizare pentru SSE, SSE2, SSE3, SSE4

    Compilatorul acceptă standardul OpenMP 3.0 pentru scrierea de programe paralele. Conține, de asemenea, o modificare a OpenMP numită Cluster OpenMP, cu care puteți rula aplicații scrise în conformitate cu OpenMP pe clustere folosind MPI.

    Intel C++ Compiler utilizează interfața (partea compilatorului care analizează programul compilat) de la Edison Design Group. Aceeași interfață este utilizată de compilatoarele SGI MIPSpro, Comeau C++ și Portland Group.

    Acest compilator este utilizat pe scară largă pentru compilarea benchmark-urilor SPEC CPU.

    Există 4 serii de produse de la Intel care conțin compilatorul:

    • Intel C++ Compiler Professional Edition
    • Intel Cluster Toolkit (Compiler Edition)

    Dezavantajele versiunii Linux a compilatorului includ incompatibilitatea parțială cu extensiile GNU ale limbajului C (suportate de compilatorul GCC), care poate cauza probleme la compilarea unor programe.

    Opțiuni experimentale

    Au fost publicate următoarele versiuni experimentale ale compilatorului:

    • Intel STM Compiler Prototype Edition din 17 septembrie 2007. Suport pentru memoria tranzacțională software (STM). Lansat pentru Linux și Windows, numai pentru IA-32 (procesoare x86);
    • Intel Concurrent Collections pentru C/C++ 0.3 din septembrie 2008. Conține mecanisme care facilitează scrierea de programe paralele C++.

    Steaguri de bază

    Windows Linux, MacOSX Descriere
    /Od -O0 Dezactivați optimizările
    /O1 -O1 Optimizați pentru a minimiza dimensiunea fișierului executabil
    /O2 -O2 Optimizați pentru viteză. Unele optimizări incluse
    /O3 -O3 Activați toate optimizările din O2. Efectuați, de asemenea, optimizări intensive de ciclu
    /Oip -Oip Activați optimizarea interprocedurală fișier cu fișier
    /Oipo -Oipo Activați optimizarea interprocedurală globală
    /QxO -xO Permite utilizarea extensiilor SSE3, SSE2 și SSE pentru procesoarele fabricate de orice companie
    /rapid -rapid "Mod rapid". Echivalent cu opțiunile „/O3 /Qipo /QxHost /no-prec-div” pe Windows și „-O3 -ipo -static -xHOST -no-prec-div” pe Linux. Vă rugăm să rețineți că indicatorul „-xHOST” înseamnă optimizare pentru procesorul pe care rulează compilatorul.
    /Qprof-gen -prof_gen Creați o versiune instrumentată a programului care va asambla un profil de performanță
    /Qprof-utilizare -prof_use Utilizați informațiile de profil din lansările de programe colectate cu steag prof_gen.

    Scrieți o recenzie despre articolul „Compilatorul Intel C++”

    Note

    Vezi si

    Legături

    Un fragment care caracterizează compilatorul Intel C++

    Și, de asemenea, s-a întors să-l vadă pe Magul Alb pentru ultima oară... Soțul ei și cel mai adevărat prieten, pe care nu l-a putut uita niciodată. În inima ei l-a iertat. Dar, spre marele lui regret, ea nu a putut să-i aducă iertarea Magdalenei... Așadar, după cum vezi, Isidora, marea fabulă creștină despre „iertarea” este doar o minciună copilărească pentru credincioșii naivi, pentru a le permite. să facă orice Rău, știind că orice ar face, vor fi în cele din urmă iertați. Dar poți ierta doar ceea ce este cu adevărat demn de iertare. O persoană trebuie să înțeleagă că trebuie să răspundă pentru orice Rău săvârșit... Și nu în fața vreunui Dumnezeu tainic, ci în fața sa, obligându-se să sufere cu cruzime. Magdalena nu l-a iertat pe Vladyka, deși l-a respectat profund și l-a iubit sincer. Așa cum ea nu a reușit să ne ierte pe toți pentru moartea cumplită a lui Radomir. La urma urmei, EA a înțeles mai bine decât oricine altcineva - am fi putut să-l ajutăm, l-am fi putut salva de la o moarte cruntă... Dar nu am vrut. Considerând că vinovăția Magului Alb este prea crudă, ea l-a lăsat să trăiască cu această vinovăție, fără a uita-o nici măcar un minut... Nu a vrut să-i acorde iertare ușoară. Nu am mai văzut-o. Așa cum nu și-au văzut niciodată copiii. Printr-unul dintre cavalerii Templului ei - vrăjitorul nostru - Magdalena i-a transmis lui Vladyka răspunsul la cererea sa de a se întoarce la noi: „Soarele nu răsare de două ori în aceeași zi... Bucuria lumii tale (Radomir) va niciodată să nu mă mai întorc la tine, așa cum eu nu mă voi întoarce la tine și eu... Mi-am găsit CREDINȚA și ADEVĂRUL, ele sunt VIE, dar ale tale sunt MORT... Plângeți-vă fiii - v-au iubit. Nu te voi ierta niciodată pentru moartea lor cât voi fi în viață. Și fie ca vina ta să rămână cu tine. Poate că într-o zi îți va aduce Lumină și Iertare... Dar nu de la mine.” Capul Magului Ioan nu a fost adus la Meteora din acelasi motiv - niciunul dintre Cavalerii Templului nu a vrut sa se intoarca la noi... I-am pierdut, ca pe multi altii i-am pierdut de mai multe ori, care nu au vrut sa se intoarca la noi. înțelegeți și acceptați victimele noastre... Care au făcut ca tine - au plecat, condamnându-ne.
    Mi se învârtea capul!.. Ca un om însetat, potolindu-mi veșnica foame de cunoaștere, am absorbit cu lăcomie fluxul de informații uimitoare oferite cu generozitate de Nord... Și îmi doream mult mai mult!.. Voiam să știu totul pentru a sfârșitul. A fost o gură de apă dulce într-un deșert pârjolit de dureri și necazuri! Și nu m-am săturat...
    – Am mii de întrebări! Dar nu mai e timp... Ce să fac, Nord?...
    - Întrebați, Isidora!.. Întrebați, voi încerca să vă răspund...
    – Spune-mi, Sever, de ce mi se pare că această poveste pare să îmbine două povești de viață, împletite cu evenimente similare, și sunt prezentate ca viața unei singure persoane? Sau nu am dreptate?
    – Ai perfectă dreptate, Isidora. După cum v-am spus mai devreme, „puterile acestei lumi”, care au creat istoria falsă a omenirii, „îmbrăcăm” adevărata viață a lui Hristos viața străină a profetului evreu Iosua, care a trăit cu o mie și jumătate de ani în urmă ( din vremea povestirii Nordului). Și nu numai el însuși, ci și familia lui, rudele și prietenii, prietenii și adepții săi. La urma urmei, era soția profetului Iosua, evreica Maria, care avea o soră Marta și un frate Lazăr, sora mamei sale Maria Yakobe și alții care nu au fost niciodată lângă Radomir și Magdalena. Așa cum nu mai erau alți „apostoli” lângă ei - Pavel, Matei, Petru, Luca și ceilalți...
    Familia profetului Iosua a fost cea care s-a mutat în urmă cu o mie și jumătate de ani în Provence (care în acele vremuri se numea Galia Transalpină), în orașul grecesc Massalia (azi Marsilia), deoarece Massalia la acea vreme era „poarta” între Europa și Asia și era cea mai ușoară cale pentru toți cei „prigoniți” pentru a evita persecuțiile și necazurile.



    
    Top