Kontentke ótiw

Mashina kodı

Wikipedia, erkin enciklopediya
W65C816S bir taxtalı kompyuterdegi mashina tiliniń monitorı, kodtı bóliwshi, sonday-aq processor registrin hám yad demplerin kórsetedi

Programmalastırıwda mashina kodı yamasa mashina tili (ingl. machine code)− kompyuterdiń oraylıq processor blogın (CPU) basqarıw ushın qollanılatuǵın mashina tili kórsetpelerinen ibarat kompyuter kodı. Onlıq kompyuterler bir waqıtları keń tarqalgan bolsa da, házirgi zaman bazarında binar kompyuterler ústemlik etedi; bul kompyuterler ushın mashina kodı "kompyuter tárepinen oqıw hám túsindiretuǵın kompyuter programmasınıń binar yaǵnıy ekilik kórinisi. Mashina kodındaǵı programma mashina kórsetpeleri izbe-izliginen ibarat (múmkin maǵlıwmatlar menen aralasqan)."[1]

Hárbir kórsetpe processordı, processor registrlerindegi yamasa yadındaǵı maǵlıwmatlardıń bir yamasa bir neshe birliklerinde júklew, saqlaw, ótiw yamasa arifmetikalıq logikalıq birlik (ALU) operaciyası sıyaqlı júdá anıq wazıypanı orınlawǵa májbúr etedi.

Dáslepki processorlarda hárbir shıǵarılǵan jańa processor menen keri úylesimlilikti buzıwı múmkin bolǵan arnawlı kodı bar edi. Kórsetpeler toplamı arxitekturası (ISA) túsinigi onıń anıq orınlanıwın kórsetpesten, sistemanıń komandalar jıynaǵınıń yadındaǵı minez-qulqın hám kodlawın anıqlaydı hám belgileydi. Bul processorlar toparında úylesimlilikke imkaniyat beretuǵın abstrakciyalıq dáreje retinde háreket etedi, usılayınsha ISA standartına sáykes jazılǵan yamasa jaratılǵan mashina kodı shańaraqlıq barlıq processorlarda, sonıń ishinde keleshektegi processorlarda da jumıs isleydi.

Ulıwma, hárbir arxitekturalıq shańaraq (mısalı, x86, ARM) óziniń ISA, arnawlı mashina kodı tili bar. PDP-11 kórsetpeler toplamına qosımsha qollawdı qamtıytuǵın VAX arxitekturası hám IA-32 kórsetpeler toplamına qosımsha qollawdı óz ishine alatuǵın IA-64 sıyaqlı ózgeshelikleri bar. Taǵı bir mısal PowerPC 615 processorı PowerPC hám x86 kórsetpeleriniń ekewin de qayta islewge arnalǵan.

Mashina kodı − qatań sanlı til hám baǵdarlamashıǵa arnalǵan oraylıq processordıń eń tómen dárejeli interfeysi. Assembler tili sanlı mashina kodı menen adam oqıy alatuǵın versiya arasında tikkeley salıstırıwdı támiyinleydi, onda sanlı operaciya kodları menen operandlar oqılatuǵın qatarlar menen almastırıladı (mısalı, x86 sistemasında NOP kórsetpesi retinde 0x90, 0xB8 MOV kórsetpesi, 0xE8 - CALL yamasa 0x0F05 degendi bildiredi, SYSCALL kórsetpesi ushın). Programmalardı tikkeley mashina kodında jazıw múmkin bolsa da, jeke bitlerdi basqarıw hám sanlı adresler menen konstantalardı qol menen esaplaw jalıqtıradı hám qátege beyim. Usı sebepli, programmalar házirgi kontekstlerde tikkeley mashina kodında júdá siyrek jazıladı, biraq tómen dárejeli otladka, programmanı dúzetiw (ásirese assembler deregi bar bolmaǵanda) hám assembler tilin ajıratıw ushın orınlanıwı múmkin.

Házirgi waqıtta programmalardıń kópshiligi joqarı dárejeli tillerde jazılǵan. Bul programmalar kompilyator arqalı mashina kodına awdarıladı yamasa interpretator arqalı túsindiriledi, ádette bayt kod sıyaqlı aralıq kodqa awdarılǵannan keyin, soń interpretaciyalanadı.

Mashina kodı anıqlaması boyınsha baǵdarlamashıǵa kórinetuǵın programmalastırıw anıqlamasınıń eń tómen dárejesi bolıp tabıladı, biraq ishki kóplegen processorlar mikrokodtı paydalanadı yamasa mashina kodı kórsetpelerin mikro-operaciyalar dizbeginde optimallastıradı hám túrlendiredi. Mikrokod hám mikro-operaciyalar ádette mashina kodı bolıp esaplanbaydı; ayırım mashinalardı qospaǵanda, paydalanıwshı mikrokodtı yamasa mikro-operaciyalardı jaza almaydı, al mikrokodtıń jumısı hám mashina kodı kórsetpeleriniń mikro-operaciyalarǵa túrleniwi ónimlilikke baylanıslı alternativ tásirlerdi qospaǵanda, baǵdarlamashı ushın ashıq túrde júredi.

Kórsetpeler jıynaǵı[redaktorlaw | derekti redaktorlaw]

Hárbir processor yamasa processorlar toparınıń jeke kórsetpeler jıynaǵı boladı. Kórsetpeler - bul mashina komandalarına sáykes keletuǵın bitlerdiń, cifrlardıń yamasa simvollardıń úlgileri. Usılayınsha, kórsetpeler jıynaǵı (tiykarınan) birdey arxitekturanı paydalanatuǵın processorlar klasına tiyisli. Miyrasxor yamasa tuwındı processor konstrukciyaları kóbinese aldınǵı versiyanıń kórsetpelerin qamtıydı hám jańa qosımsha kórsetpelerdi qosıwı múmkin. Geyde miyrasxor dizayn ayırım kórsetpe kodınıń mánisin toqtatadı yamasa ózgertedi (ádette ol jańa maqsetler ushın kerek bolǵanlıqtan), belgili bir dárejede kod úylesimliligine tásir etedi; hátte úylesimli processorlar ayırım kórsetpeler ushın sál ózgeshe háreketti kórsetiwi múmkin, biraq bul siyrek másele. Sistemalar yadtıń jaylasıwı, operacion sistemalar yamasa periferiyalıq qurılmalar sıyaqlı basqa maǵlıwmatlarda da ózgesheleniwi múmkin. Programma ádette usınday faktorlarǵa súyenetuǵınlıqtan, hár túrli sistemalar ádette bir tipli processor paydalanılsa da,  birdey mashina kodın iske túsirmeydi.

Processordıń kórsetpeler jıynaǵında turaqlı yamasa ózgeriwshi uzınlıqtaǵı kórsetpeler bolıwı múmkin. Úlgilerdiń shólkemlestiriliwi anıq arxitektura menen kórsetpe túrine baylanıslı ózgeredi. Kórsetpelerdiń kópshiliginde tiykarǵı kórsetpe túrin (mısalı arifmetikalıq, logikalıq, ótiw, h.t.b.), operaciyanı (qosıw yamasa salıstırıw sıyaqlı) hám operand(lar) túrin beretuǵın basqa maydanlardı kórsetetuǵın bir yamasa bir neshe operaciyalıq kod maydanları boladı. Adreslew rejim(leri), adreslew jıljıw(lar)ı, indeks yamasa operand mánisiniń ózi (kórsetpedegi usınday turaqlı operandlar operativ dep ataladı).[2]

Barlıq mashinalarda yamasa jeke kórsetpelerde anıq operandlar bolmaydı. Jalǵız akkumulyatorı bar mashinada akkumulyator alternativ túrde shep jaq operand hám kóplegen arifmetikalıq kórsetpelerdiń nátiyjesi bolıp tabıladı. Ayırım basqa arxitekturalarda, mısalı x86 arxitekturasında ulıwma kórsetpelerdiń akkumulyatorlıq versiyaları bar, akkumulyator uzaǵıraq kórsetpeler boyınsha ulıwma registrlerdiń biri retinde qarastırıladı. Stek mashinasında jasırın stekte onıń operandlarınıń kópshiligi yamasa barlıǵı bar. Arnawlı maqsetli kórsetpelerde de jiyi anıq operandlar joq; mısalı x86 arxitekturasındaǵı CPUID mánislerdi tórt jasırın tayınlaw registrlerine jazadı. Ashıq hám jasırın operandlar arasındaǵı bul ayırmashılıq kod generatorlarında zárúr, ásirese registrdi bóliw hám janlı diapazondı baqlaw bólimlerinde. Jaqsı kodtı optimallastırıwshı kóbirek turaqlı tarqatıwǵa, registrlerdiń turaqlı búkleniwine (onı usı turaqlıǵa almastırıw arqalı bosatılǵan turaqlı ańlatpanıń nátiyjesi tayınlanǵan registr) hám basqa kodtı jaqsılawǵa imkaniyat beretuǵın jasırın hám ayqın operandlardı baqlay aladı.

Programmalar[redaktorlaw | derekti redaktorlaw]

Kompyuter programması − oraylıq processor (CPU) orınlay alatuǵın kórsetpeler dizimi. Programmanıń orınlanıwı onı orınlaytuǵın oraylıq processordıń máseleni sheshiwi hám usılayınsha nátiyjege erisiwi ushın ámelge asırıladı. Ápiwayı processorlar kórsetpelerdi izbe-iz orınlay alatuǵın bolsa, superskalyar processorlar belgili bir jaǵdaylarda (qubır tolǵanda) eki yamasa onnan da kóp kórsetpelerdi bir waqıtta orınlay aladı. Mısal retinde, 1993-jılǵı original Intel Pentium “qubırı tolǵanda” saatlıq ciklge eń kóp eki kórsetpeni orınlay aladı.

Programma aǵımına orınlanıwı keyingi sanlı izbe-iz adresten basqa adreske jetkerip beretuǵın arnawlı “sekiriw” kórsetpeleri tásir etiwi múmkin. Bul shártli sekiriwlerdiń júz beriwi mánistiń basqa mánisten úlken, kishi yamasa oǵan teń bolıwı sıyaqlı shártke baylanıslı.

Qaytalanatuǵın kórsetpeler[redaktorlaw | derekti redaktorlaw]

Ózgeriwshi uzınlıqtaǵı[3] kórsetpeler jıynaǵı bar processor arxitekturalarında (mısalı Intel kompaniyasınıń x86 processorlar toparı) bul Kruskal sanı[4][5][6][7][8] dep atalatuǵın basqarıw aǵımın qayta sinxronlaw qubılısı sheńberinde, geyde nátiyje kodtı aldınnan retlew ushın operaciyalıq kod dárejesindegi programmalastırıw arqalı múmkin boladı. Eki kod jolı operaciyalıq kod tártibiniń ulıwma fragmentin bólisedi. Olar qabatlasatuǵın kórsetpeler, qaytalanatuǵın operaciyalıq kodlar, qabatlasatuǵın kod, qabatlastırılǵan kod, kórsetpeniń kesiliwi yamasa kórsetpeniń ortasına ótiwi dep ataladı hám superpoziciya formasın bildiredi.

1970 hám 1980 jılları yad keńisligin saqlaw ushın geyde qaytalanatuǵın kórsetpeler qollanıldı. Bir mısal Microsoft korporaciyasınıń Altair BASIC programmasında qáte kestelerin ámelge asırıwda boldı, bunda aralas kórsetpeler óz-ara kórsetpe baytların bólisti.[9][10][11] Bul usıl búgingi kúnde siyrek paydalanıladı, biraq bayt dárejesinde ólshemdi hádden tıs optimallastırıw kerek orınlarda, mısalı júklew sektorlarına sáykes keletuǵın júklewshilerdi ámelge asırıwda kerek bolıwı múmkin.

Ol sonday-aq geyde bóliwge hám buzıwǵa qarsı shara retinde kodtı jasırıw usılı retinde paydalanıladı.

Bul princip sonıń menen bir qatarda bir neshe kórsetpeler jıynaǵına sáykes kelmeytuǵın processor platformalarında jumıs islewi kerek ekilik fayllardıń ulıwma kod izbe-izliginde qollanıladı.[12][13]

Bul qásiyet sonday-aq bar kod repozitoriylerinde gadjetler dep atalatuǵın kútilmegen kórsetpelerdi tabıw ushın paydalanıladı hám qaytarıwǵa baǵdarlanǵan programmalastırıwda libc-ke qaytarıw hújimleri sıyaqlı ekspluataciyalar ushın kodtı kirgiziwge alternativ retinde paydalanıladı.[14][15]

Derekler[redaktorlaw | derekti redaktorlaw]

  1. Stallings, William. Computer Organization and Architecture 10th edition — 776 bet. ISBN 9789332570405. 
  2. Kjell, Bradley. "Immediate Operand".
  3. Jacob, Matthias; Jakubowski, Mariusz H.; Venkatesan, Ramarathnam [at Wikidata] (20–21 September 2007). Towards Integral Binary Execution: Implementing Oblivious Hashing Using Overlapped Instruction Encodings (PDF). Proceedings of the 9th workshop on Multimedia & Security (MM&Sec '07). Dallas, Texas, US: Association for Computing Machinery. pp. 129–140. CiteSeerX 10.1.1.69.5258. doi:10.1145/1288869.1288887. ISBN 978-1-59593-857-2. S2CID 14174680. Archived (PDF) from the original on 2018-09-04. Retrieved 2021-12-25. (12 pages)
  4. Lagarias, Jeffrey "Jeff" Clark; Rains, Eric Michael; Vanderbei, Robert J. (2009) [2001-10-13]. Brams, Stephen; Gehrlein, William V.; Roberts, Fred S. (eds.). "The Kruskal Count". The Mathematics of Preference, Choice and Order. Essays in Honor of Peter J. Fishburn. Berlin / Heidelberg, Germany: Springer-Verlag: 371–391. arXiv:math/0110143. ISBN 978-3-540-79127-0. (22 pages)
  5. Jacob, Matthias; Jakubowski, Mariusz H.; Venkatesan, Ramarathnam [at Wikidata] (20–21 September 2007). Towards Integral Binary Execution: Implementing Oblivious Hashing Using Overlapped Instruction Encodings (PDF). Proceedings of the 9th workshop on Multimedia & Security (MM&Sec '07). Dallas, Texas, US: Association for Computing Machinery. pp. 129–140. CiteSeerX 10.1.1.69.5258. doi:10.1145/1288869.1288887. ISBN 978-1-59593-857-2. S2CID 14174680. Archived (PDF) from the original on 2018-09-04. Retrieved 2021-12-25. (12 pages)
  6. Andriesse, Dennis; Bos, Herbert [at Wikidata] (2014-07-10). Written at Vrije Universiteit Amsterdam, Amsterdam, Netherlands. Dietrich, Sven (ed.). Instruction-Level Steganography for Covert Trigger-Based Malware (PDF). 11th International Conference on Detection of Intrusions and Malware, and Vulnerability Assessment (DIMVA). Lecture Notes in Computer Science. Egham, UK; Switzerland: Springer International Publishing. pp. 41–50 [45]. doi:10.1007/978-3-319-08509-8_3. eISSN 1611-3349. ISBN 978-3-31908508-1. ISSN 0302-9743. S2CID 4634611. LNCS 8550. Archived (PDF) from the original on 2023-08-26. Retrieved 2023-08-26. (10 pages)
  7. Jakubowski, Mariusz H. (February 2016). "Graph Based Model for Software Tamper Protection". Microsoft. Archived from the original on 2019-10-31. Retrieved 2023-08-19.
  8. Jämthagen, Christopher (November 2016). "On Offensive and Defensive Methods in Software Security" (PDF) (Thesis). Lund, Sweden: Department of Electrical and Information Technology, Lund University. p. 96. ISBN 978-91-7623-942-1. ISSN 1654-790X. Archived (PDF) from the original on 2023-08-26. Retrieved 2023-08-26. (1+xvii+1+152 pages)
  9. Gates, William "Bill" Henry, Personal communication (NB. According to Jacob et al.)
  10. Jacob, Matthias; Jakubowski, Mariusz H.; Venkatesan, Ramarathnam [at Wikidata] (20–21 September 2007). Towards Integral Binary Execution: Implementing Oblivious Hashing Using Overlapped Instruction Encodings (PDF). Proceedings of the 9th workshop on Multimedia & Security (MM&Sec '07). Dallas, Texas, US: Association for Computing Machinery. pp. 129–140. CiteSeerX 10.1.1.69.5258. doi:10.1145/1288869.1288887. ISBN 978-1-59593-857-2. S2CID 14174680. Archived (PDF) from the original on 2018-09-04. Retrieved 2021-12-25. (12 pages)
  11. "Unintended Instructions on x86". Hacker News. 2021. Archived from the original on 2021-12-25. Retrieved 2021-12-24.
  12. Jacob, Matthias; Jakubowski, Mariusz H.; Venkatesan, Ramarathnam [at Wikidata] (20–21 September 2007). Towards Integral Binary Execution: Implementing Oblivious Hashing Using Overlapped Instruction Encodings (PDF). Proceedings of the 9th workshop on Multimedia & Security (MM&Sec '07). Dallas, Texas, US: Association for Computing Machinery. pp. 129–140. CiteSeerX 10.1.1.69.5258. doi:10.1145/1288869.1288887. ISBN 978-1-59593-857-2. S2CID 14174680. Archived (PDF) from the original on 2018-09-04. Retrieved 2021-12-25. (12 pages)
  13. Jakubowski, Mariusz H. (February 2016). "Graph Based Model for Software Tamper Protection". Microsoft. Archived from the original on 2019-10-31. Retrieved 2023-08-19.
  14. Shacham, Hovav (2007). The Geometry of Innocent Flesh on the Bone: Return-into-libc without Function Calls (on the x86) (PDF). Proceedings of the ACM, CCS 2007. ACM Press. Archived (PDF) from the original on 2021-12-15. Retrieved 2021-12-24.
  15. Jacob, Matthias; Jakubowski, Mariusz H.; Venkatesan, Ramarathnam [at Wikidata] (20–21 September 2007). Towards Integral Binary Execution: Implementing Oblivious Hashing Using Overlapped Instruction Encodings (PDF). Proceedings of the 9th workshop on Multimedia & Security (MM&Sec '07). Dallas, Texas, US: Association for Computing Machinery. pp. 129–140. CiteSeerX 10.1.1.69.5258. doi:10.1145/1288869.1288887. ISBN 978-1-59593-857-2. S2CID 14174680. Archived (PDF) from the original on 2018-09-04. Retrieved 2021-12-25. (12 pages)
Silteme kórsetiwdegi qátelik: <ref> tag with name "Decompile" defined in <references> is not used in prior text.

Qosımsha oqıw[redaktorlaw | derekti redaktorlaw]