Den VPN-Installer seet 32-Bit: kuckt amplaz den ELF-Header
D’Wuertgréisst identifizéiert net den Instruktiounsset. Prozedur fir Klass, Maschinn an Interpreter ze liesen an duerno e Build ze froen, dee mat dem Host passt.
Eng Downloadsäit seet 32-Bit, d’Fichier lant op engem Raspberry Pi, an den Installer feelt mat enger Noriicht, déi keen nëtzlechen Deel vum Problem nennt. Zwee komplett verschidde executable Fichieren zielen allebéid als 32-Bit am ELF-Sënn, an nëmmen een vun hinnen kann op deem Board lafen. D’Klassfeld ass eng Tatsaach, d’Maschinnfeld eng aner, an en Dateinumm seet Iech vertrauenswürdeg keent vun deenen zwee. Liest den Header, ier Dir eng Bibliothéik ännert oder en anere Spigel probéiert.
D’Klass seet d’Wuertgréisst, d’Maschinn seet den Instruktiounsset
De Linux-ELF-Referenz definéiert e Klassfeld an e Maschinnfeld am Dateikopf, an déi zwee beäntwerten ënnerschiddlech Froen. D’Klass seet, ob d’Fichier déi 32-Bit- oder déi 64-Bit-Form benotzt; d’Maschinn seet, fir wéi en Instruktiounsset se gebaut gouf. En 32-Bit-x86-Build an en 32-Bit-ARM-Build sinn eens beim éischten an ënnerscheede sech beim zweeten. Sou levert en Etikett, deen déi richteg Wuertgréisst versprécht, awer ëmmer nach Code, deen de Prozessor net kann decodéieren. Den drëtte Wäert, deen et wäert ass ze liesen, ass den ugefrote Interpreter, deen d’Programmheader nennen, wann d’Binärdatei een deklaréiert.
readelf -h -- ./vendor-vpn
readelf -l -- ./vendor-vpn
readelf -d -- ./vendor-vpn | grep NEEDED
Déi éischt Kommando dréckt den Header, déi zweet dréckt Programmheader, wann d’Fichier der huet, an déi drëtt lëscht déi gedeelt Objeten, déi de Loader brauch. Schreift Klass, Maschinn an Interpreter zesummen op, well dës dräi Wäerter déi ganz Kompatibilitéitsfro op dëser Schicht sinn. Kee vun den dräi steet op engem Downloadknäppchen, dofir muss d’Fichier ënnersicht an net beschriwwe ginn.
Wéi en Interpreter se vum Kernel freet
Eng executable Fichier, déi en Interpreter deklaréiert, freet de Kernel ëm ee bestëmmte Loaderwee. Wann dee Loader feelt, feelt de Start och wann d’Fichier, déi Dir genannt hutt, direkt do läit. Dat ass de Punkt, wou d’Leit decidéieren, datt den Download korrupt ass, wärend déi richteg Äntwert en Loader ass, deen d’Distributioun net liwwert.
Passt de Loader un d’System un, dat Dir tatsächlech bedreift: d’OS-Versioun, d’Architektur vum Benotzerraum an de Package, deen de Loader liwwert. En 64-Bit-Kernel kann en 32-Bit-Benotzerraum nëmme lafen, wann dee Raum an säi Loader installéiert sinn, dofir sinn d’Fäegkeete vum Prozessor net de entscheedende Faktor. Eng kuerz Kontroll nennt den Interpreter op enger eenzeger Linn, an et dauert manner wéi en Supportticket. E Shellskript feelt nach eng Kéier anescht, well säin Interpreter an der éischter Linn genannt gëtt an net an engem ELF-Header, an déi Linn ze liesen kascht näischt.
file --brief ./vendor-vpn
Passt den Download un d’Packagearchitektur un
D’Packagearchitekture vun den Distributiounen encodéieren déisselwecht Ënnerscheedung an hirem eegene Vokabulär, an op dee Vokabulär bezitt sech d’Supportausso vun engem Fournisseur. Vergläicht de Wäert, deen Äre Packagemanager mëttelt, mam Wäert, deen de Fournisseur dokumentéiert, amplaz en Marketingetikett mat engem Dateinumm ze vergläichen. D’Puer, déi Problemer maachen, sinn amd64 géint arm64 an armhf géint armel, well all Puer an enger Downloadlëscht austauschbar ausgesäit. En Dateinumm, deen op x64 oder ia32 ophält, beschreift en Buildzil, net d’Maschinn, déi en hält.
| Label on the download | ELF class | e_machine | Interpreter the kernel wants | How it fails on the wrong host |
|---|---|---|---|---|
| amd64 | ELF64 | x86-64 | /lib64/ld-linux-x86-64.so.2 | Immediate exec failure on an ARM board |
| armhf | ELF32 | ARM | /lib/ld-linux-armhf.so.3 | Loads on a soft-float system, then fails on a float ABI call |
| i386 | ELF32 | Intel 80386 | /lib/ld-linux.so.2 | Exec format error where no 32-bit loader package exists |
All Zeil ass e Fall, wou d’Wuertgréisst richteg ausgesäit an de Code sech awer falsch behält, oder wou en ufänkt an duerno eng Schicht méi déif feelt. Liest d’Interpreterspal als haart Ufuerderung an net als Hiweis, well de Kernel dee Wee léist, ier irgendeen Deel vun Ärem Code leeft. Emulatioun ass eng Asatzescheidung mat hiren eegene Konsequenzen fir Leeschtung a Support, an se gëtt ni vun engem Prozessor implizéiert, deen eng méi breet Wuertgréisst annonceiert.
dpkg --print-architecture
ENOEXEC an ENOENT sinn ënnerschiddlech Feeler
D’Startphas mëttelt ee vun zwee Feeler, an se weisen op ënnerschiddlech Problemer hin. De Feelerwäert ze liesen klassifizéiert de Feeler, ier Dir eppes anescht ausféiert.
ENOEXEC bedeit, datt d’Format net erkannt gouf: falsch Architektur, falsch Klass oder eppes, dat guer keng executable Fichier ass. ENOENT op enger ELF-Fichier bedeit normalerweis, datt den Interpreter feelt, och wann d’Fichier, déi Dir gefrot hutt, existéiert. Datselwecht ENOENT kann och heeschen, datt den Interpreter vun engem Skript feelt, dofir ass déi éischt Linn vun engem Skript wichteg. Wéi och ëmmer nennt d’Noriicht d’Schicht, an all „net fonnt“ als fehlend Konfiguratioun ze behandelen schéckt d’Enquête an déi falsch Richtung. Zitéiert de Feelerwäert am Ticket, well en d’Nacherzielen besser iwwersteet wéi de Saz ronderëm.
Wat een net maache soll, wann d’Binärdatei net start
Eng onerkläert Binärdatei duerch eng Shellëmhüllung ze zwéngen mécht se net lafen. Fuert en Ofhängegkeetscheck net liederlech op enger Fichier aus, déi Dir net vertraut, well seng Ausféierung ënner Ëmstänn Code aus der Binärdatei ausféiere kann. Setzt keng Loader-Symlinks derbäi, tauscht keng Hostbibliothéiken aus a sicht keng al Archiv vun engem Drëttsparteispigel, fir d’Noriicht ze ëmgoen. Jiddwer vun dësen erweidert d’Ännerungsfläch, ouni déi Net-Iwwereneestëmmung ze beréieren, déi den Header schonn genannt huet.
Wann Dir Iech un de Fournisseur wennt, schéckt Wäerter an net eng Geschicht: d’OS-Versioun, d’Packagearchitektur, d’Klass- a Maschinnstréng, den ugefrote Interpreter an déi éischt Feelerlinn. Dee Set léist Supportfroen méi séier wéi en Ecranofdrock vun engem Installer, dee feelt. Al Artefakten an erënnert Forumsausgaben sinn keng aktuell Supportmatrix, an nodeems eng natierlech Binärdatei gelueden ass, bleiwen Profil, Authentifizéierung an Routing eng separat Aarbecht.