Chiar ai nevoie de codul sursă? Cum să vizualizați codul sursă al unei aplicații Android.

26.07.2019 Panoul Straturi
3 septembrie 2014 la 16:07

Chiar ai nevoie de codul sursă?

  • Programarea microcontrolerelor
  • Traducere
În multe cunoștințe, multe necazuri
Dacă întrebați orice dezvoltator de firmware dacă dorește acces la codul sursă sistem de operareîn timp real pe care îl folosește, răspunsul va fi aproape sigur - desigur. Același lucru este valabil și cu orice software achiziționat. Este acesta un răspuns rezonabil pentru toate cazurile și de ce codul sursă este uneori necesar și uneori mai puțin util decât se aștepta?

Există o serie de criterii cheie pe care inginerii le folosesc atunci când aleg un sistem de operare în timp real (RTOS). Multe dintre ele - cost, funcționalitate, licențiere, suport - sunt fără îndoială foarte importante (în special costul - acestea sunt realitățile noastre). Cu toate acestea, un alt criteriu - disponibilitatea codului sursă - poate să nu fie la fel de important, dar este întotdeauna evaluat ca un factor puternic.

Disponibilitatea codului sursă nu înseamnă că acesta este furnizat automat gratuit. Această abordare este valabilă numai pentru produsele open source, în alte cazuri, producătorii pot percepe codul sursă sau îl pot pune la dispoziție la cerere.

Dezvoltare hardware. Aceasta include și codul sursă, ceea ce este valabil mai ales pentru dezvoltarea folosind VHDL și Verlog. Cum merg lucrurile aici? Din punct de vedere istoric, atunci când a selectat un circuit integrat și a proiectat aplicația acestuia, inginerul s-a bazat pe specificații care specificau funcționalitatea, pinout, cerințele de alimentare etc. Și totuși nimeni nu se aștepta să vadă diagrama completa structura internă a CI, deși au putut vedea adesea o diagramă bloc (în principal ca material ilustrativ, care a făcut mai ușor de înțeles principiile de funcționare) și uneori chiar diagrama schematica(pentru circuite integrate analogice, cum ar fi amplificatoarele operaționale), deși fără evaluări.
Un inginer care proiectează astăzi un firmware ASIC sau FPGA va folosi probabil câteva blocuri IP pre-construite - un bloc pre-ambalat care oferă o funcționalitate specifică. Totuși, alegerea se va baza pe specificații și nu este deloc evident că HDL-ul original pentru IP va fi inclus în pachet. Această abordare cutie neagră este bine cunoscută în lumea hardware.

Siguranţă. Orice tehnologie care este inclusă într-un produs ar trebui să fie selectată având în vedere suportul tehnic viitor. De exemplu, atunci când selectați IP, ar trebui să evitați utilizarea produselor unice de la un singur producător, ceea ce poate atenua problemele legate de întreruperile aprovizionării.
Când utilizați IP, fie că este vorba de hardware sau software furnizat, este puțin probabil să apară eșecurile de alimentare ca atare (cu excepția cazului de licențe unice), dar trebuie să existe suport continuu. Prin urmare, întrebarea dacă furnizorul dvs. va fi în activitate pe întreaga durată de viață a produsului dvs. este cel mai bine pusă înainte de a alege o implementare specifică.

Dacă codul sursă pentru un IP este disponibil, face posibilă rezolvarea oricărei (ei bine, aproape orice) problemă de software, chiar dacă furnizorul nu mai este în măsură să ofere suport. Din acest motiv, mulți cumpărători de RTOS etc. ar dori să aibă codul sursă pe raft chiar dacă nu se uită niciodată la el, pentru orice eventualitate.

Personalizarea software Principala diferență dintre sistemele încorporate și desktop-uri este variabilitatea celor dintâi. Cele mai multe PC-uri sunt similare cu multe altele și alegerea este doar între mediul de execuție: Windows, Mac sau Linux. Sistemele încorporate, pe de altă parte, sunt incredibil de variabile - diferite procesoare, configurații de memorie și dispozitive periferice. Ca rezultat, software-ul IP trebuie să fie flexibil, astfel încât să poată fi implementat pe o varietate de sisteme. Deși multe produse, cum ar fi RTOS, sunt livrate în formă binară - de obicei o bibliotecă care este personalizată pentru o arhitectură specifică - cerințele de livrare a codului sursă pot stimula furnizorii prin eliminarea nevoii de a stoca și suporta mai multe variații, deoarece furnizarea IP ca sursă rezolvă multe dintre acestea. probleme. Utilizatorul poate construi cod pentru un anumit procesor, îl poate adapta la cardul de memorie al dispozitivului și poate adăuga extensiile necesare pentru dispozitiv. În unele cazuri, un bloc IP poate fi configurat utilizând compilarea condiționată - de obicei, un fișier antet este editat pentru a defini configurația.

Certificare. Pentru unele tipuri de aplicații, cum ar fi cele militare/aviație și medicale, firmware-ul trebuie să fie certificat pentru siguranță și conformitate standarde diferite. Acest proces este complex și costisitor și implică de obicei verificarea fiecărei linii de cod. Prin urmare, de obicei nu este posibil să achiziționați unități software „precertificate”, deoarece întreaga aplicație este supusă revizuirii. Astfel, un dezvoltator de aplicații critice va căuta probabil un IP care este disponibil împreună cu codul sursă, astfel încât să poată fi efectuată verificarea completă.

Ce s-a întâmplat Cod sursă?
Întrebarea poate părea ciudată, dar fără un răspuns, discutarea oricăror aspecte ale prezenței (sau absenței) ei se transformă într-un exercițiu oarecum ciudat. Răspunsul poate părea evident: codul sursă al unui program este o colecție de fișiere care conțin instrucțiuni de nivel înalt sau în limbaj de asamblare care pot fi compilate și asamblate în instrucțiuni binare funcționale. Imediat întrebarea este: programele necesare procesului de transformare și mediul de execuție pentru ele fac parte din codul sursă (în formă binară)? Cu toate acestea, această definiție îndeplinește cel puțin 3 forme în care „codul sursă” poate fi furnizat (de exemplu, să vorbim despre limbajul C) în ordinea deteriorării calității:
1) Cod sursă cu adevărat, cu un aspect bun, convenții clare de denumire a variabilelor și bine comentat (cu condiția ca dezvoltatorul IP să aibă unul, care este complet opțional).
2) Linii de cod care se vor compila cu succes DAR fără comentarii sau nume de identificare deosebit de semnificative.
3) Liniile de cod după obstrucție, ceea ce face codul imposibil de citit de oameni, dar acceptabil pentru compilator. Acest lucru se face prin înlocuirea numelor de identificare cu altele fără sens și eliminarea tuturor comentariilor și a spațiilor inutile din punct de vedere sintactic. Există un proces invers, dar rezultatele sale cu greu pot fi numite acceptabile.
Toate aceste formulare sunt utilizate de furnizorii de software în următoarele scopuri:
1) este ceea ce majoritatea cumpărătorilor se așteaptă să primească și ceea ce oferă de fapt mulți producători. Cu toate acestea, atunci când luați o decizie de cumpărare, dacă aveți nevoie de cod sursă, este important să vă asigurați că aceasta este opțiunea, dacă aveți îndoieli, doar cereți mostre.
2) folosit de obicei atunci când vânzătorul dorește să livreze minimul necesar, care poate fi (doar) suficient de bun pentru certificare.
3) este folosit pentru a proteja conținutul IIP de privirile indiscrete, ceea ce înseamnă că software-ul beneficiază de configurabilitate, dar nimic mai mult.

Dezavantajele codului sursă.
Cel mai mare dezavantaj de a avea codul sursă disponibil: este foarte tentant. Fiecare dezvoltator vrea să-și facă software-ul cât mai bun posibil (ei bine, există un astfel de punct de vedere). Deci, de exemplu, dacă API-ul RTOS nu funcționează exact pentru a fi optim pentru aplicație, disponibilitatea codului sursă oferă posibilitatea de a-l schimba.
Deși poate părea un lucru grozav să faci o aplicație optimă, există o problemă cu suportul pe termen lung. Ce se întâmplă dacă există o problemă cu funcționalitatea RTOS? Furnizorul nu va sprijini produsul modificat. Ce trebuie să faceți dacă este lansată o nouă versiune a RTOS? Includerea lui într-o reproiectare poate necesita timp semnificativ pentru modificări repetate, mai ales dacă autorul lor nu mai funcționează pentru tine (ei bine, fie ai făcut aceste modificări acum 3 ani și bineînțeles, fie, după cum se spune, desigur, nu ai făcut-o deranjeaza redactarea documentatiei corespunzatoare).

Având în vedere situațiile în care codul sursă poate fi de dorit, util sau necesar, concluzia este că nu este absolut și întotdeauna necesar. Dacă achiziționați un IP de la un furnizor mare, bine cunoscut și stabil, care poate oferi suport pe termen lung, atunci a avea codul sursă nu este relevant și poate fi chiar enumerat ca un dezavantaj.

Pentru ca programul să efectueze acțiunile prescrise, de exemplu, să calculeze, să afișeze rezultatul, să răspundă la acțiunile utilizatorului, de exemplu, apăsarea butoanelor, selectarea liniilor dintr-o listă, este necesar codul programului.

Cod program este un set de cuvinte și simboluri ale unui limbaj de programare.

Alfabet - Asta set complet litere, cifre și simboluri adoptate în limbă pentru a desemna date și acțiuni asupra acestora.

Alfabetul limbajului Visual Basic include următorul set de caractere:

Litere mari (A - Z) și mici (a - z) ale alfabetului latin;

Numerele de la 0 la 9;

Semne ale operațiilor aritmetice (în ordinea crescătoare a priorității): +, -, *, /, |, ^;

Semne ale operațiilor relaționale: =,<, >.

Semne de punctuație și separatoare: ,  . : ; ();

Alfabetul limbii include și rezervat cuvinte care nu pot fi folosite ca nume variabile sau proceduri. Exemple de cuvinte rezervate: Dim, Sub, Integer etc. În mod implicit, fontul albastru este folosit pentru a evidenția cuvintele cheie în fereastra de editare a codului Visual Basic.

Cuvintele și simbolurile trebuie scrise strict conform regulilor limbii, fără erori de ortografie și de punctuație. Este ortografia exactă care va permite computerului să înțeleagă și să execute fără ambiguitate programul.

Fereastra de cod

Codul programului este scris în fereastra de cod. Fiecare formular are o astfel de fereastră.

Deschide fereastra de cod:

1 cale - în fereastră Explorator de proiecte faceți clic dreapta pe formularul dorit și selectați din meniul care se deschide Arată codul.

Nota: Este posibil ca fereastra de cod să nu fie asociată cu formularul. Fereastra de cod separată este numită Modul. Modulele din fereastra Project Explorer sunt grupate într-un grup Module. Pentru a deschide o fereastră cu codul modulului, trebuie să în fereastră Explorator de proiecte faceți dublu clic pe numele modulului.

Metoda 2 - faceți dublu clic pe elementul de control din formular sau pe formularul propriu-zis din fereastra formularului.

Nota: aceasta nu numai că deschide fereastra de cod, dar creează și o procedură de gestionare a evenimentelor (vezi mai jos).

Structura ferestrei de cod:

Orez. 7. Fereastra cod program.

    Lista de controale

    Lista evenimentelor de control

    Procedura (cod)

Proceduri

Deoarece atunci când frigiderul este deschis, lampa se aprinde, iar când robinetul este deschis, apa curge afară, putem spune că atunci când are loc evenimentul deschiderii frigiderului, se efectuează o procedură, iar evenimentul deschiderii robinetului determină alta. procedură. În mod similar, codul programului constă din proceduri separate, fiecare dintre ele efectuând propriile acțiuni specifice, de exemplu, o procedură aprinde o lampă, alta pornește (pompează) apa.

Visual Basic - limbaj de programare procedural. Aceasta înseamnă că puteți crea blocuri de cod în el, care pot fi apoi referite după nume. Odată ce un bloc de cod are un nume, acesta poate fi numit si completat. Este ca un program în cadrul unui program. Se numesc programele mici care „trăiesc” în programe mari funcţii dacă ele returnează o oarecare valoare și subrutine, dacă nu returnează valori.

Rutinele și funcțiile fac programarea mai ușoară și mai rapidă, iar codul pe care îl creați mai fiabil. Crearea propriilor rutine și funcții este primul pas către dezvoltare încapsulatși cod reutilizabil. Încapsularea înseamnă ascunderea implementării proprietăților și metodelor unui obiect în spatele interfeței sale externe.

Procedură (subrutina) este un fragment separat de cod de program cu ajutorul căruia se rezolvă de obicei o sarcină mică este un bloc de program mic, construit logic, în care este împărțit întregul program;

Dacă o procedură poate fi executată numai într-un anumit bloc de program (de exemplu, numai în această formă) și nu poate fi apelată dintr-un alt bloc de program, atunci o astfel de procedură este locală. O procedură locală este specificată folosind cuvântul cheie Private Sub.

Dacă o procedură poate fi apelată din alte blocuri de program (de exemplu, dintr-un alt formular), atunci o astfel de procedură este globală. O procedură globală este specificată folosind cuvântul cheie Public Sub.

În mod implicit, dacă înainte de cuvântul cheie Sub, nu există cuvânt cheie, atunci aceasta este o procedură globală.

Procedurile sunt:

    Proceduri de eveniment.

    Executat atunci când are loc un eveniment pe un control (sau formular). O procedură de eveniment este întotdeauna asociată cu un obiect. Pentru a apela procedura de eveniment a unui obiect, pur și simplu faceți dublu clic stânga pe obiect. Proceduri arbitrare. Nu este asociat cu evenimente și poate fi apelat din orice altă procedură și executat în orice moment. Dacă același bloc de program apare în toate formele dintr-un program, atunci acesta poate fi scris o singură dată și într-un singur loc, sub forma unui global program general.

Procedura generală poate fi atât Privată locală, cât și Publică globală

Structura procedurii

    Procedura constă din următoarele elemente: Antetul procedurii

- marchează începutul procedurii, tipul acesteia, scopul (evenimentul).

    Un exemplu de titlu de procedură care este executat atunci când se face clic pe un buton numit Command1. Cuvânt Privat

    înseamnă închis, adică procedura aparține numai acestui formular sau modul și nu poate fi utilizată de alte containere (formulare, module). Dacă acest cuvânt este omis, procedura va fi deschisă altor containere.

Nota: Sub

    - procedura. Pe lângă proceduri, există și funcții. Funcțiile nu sunt asociate cu evenimente și pot returna în plus rezultatul muncii lor (calcule). Element de control

    (sau numele formularului): Acesta specifică numele exact al elementului stocat în proprietate Nume.

    Eveniment

    - denumirea evenimentului. Iată câteva evenimente:

    Click - click mouse;

    DblClick - dublu clic;

    KeyPress - apăsare taste;

    UnLoad - descărcarea formularului (la închiderea formularului, terminarea programului);

    Activare - activarea formularului (când dați clic pe formular și titlul acestuia este evidențiat);

    Dezactivare - dezactivați formularul (când dați clic pe alt formular).

    Initialize - la crearea unui obiect de tip formular.

    Redimensionare - la modificarea dimensiunii formularuluiÎncetare - în momentul ștergerii formularului

Argumente

- acestea sunt datele inițiale trecute în procedura de prelucrare. Procedurile personalizate au următorul antet: Denumirea procedurii trebuie să existe

    unic , trebuie să înceapă cu o literă și nu trebuie să conțină spații sau caractere, altele decât liniuțe de subliniere. Procedura este numită după nume atunci când trebuie executată.

Nota Sfârșitul procedurii

    - încheie codul de program al procedurii: End Sub : pentru funcții: End Function

Organul de procedurăînseamnă închis, adică procedura aparține numai acestui formular sau modul și nu poate fi utilizată de alte containere (formulare, module).) - - acestea sunt liniile dintre titlu și final.

( Cuvânt | Numărul lor este nelimitat. Liniile conțin instrucțiuni care trebuie executate atunci când procedura este apelată (se produce evenimentul). ) înseamnă închis, adică procedura aparține numai acestui formular sau modul și nu poate fi utilizată de alte containere (formulare, module). Subrutină ( ()

este o procedură care execută cod de program în blocul său și nu returnează o valoare. Sintaxa unei subrutine simple este: Public înseamnă închis, adică procedura aparține numai acestui formular sau modul și nu poate fi utilizată de alte containere (formulare, module).

SubMain

..linii de cod

Sfârşit Domeniul de aplicare al subrutinei;

Sub - tip de procedură (și anume, subrutină);

subMain

numele dat subrutinei;

    End Sub - sfârșitul blocului de cod al subrutinei. - faceți dublu clic pe controlul sau formularul dorit. Se va deschide fereastra de cod, iar titlul și sfârșitul procedurii vor apărea în ea. Dacă este necesar un alt eveniment, acesta este selectat folosind lista din colțul din dreapta sus al ferestrei de cod.

    Metoda 2 - deschideți fereastra de cod, mergeți la Tools → Add Procedure → specificați numele și parametrii procedurii → Ok.

    3 căi - deschideți fereastra de cod și introduceți liniile necesare de la tastatură.

Rezultatul ar trebui să fie:

Subcomandă privată1_Click()

Apelarea procedurilor pentru executare

    Pentru ca o procedură de eveniment să se execute, evenimentul trebuie să aibă loc.

    Pentru a executa o procedură arbitrară, specificați numele acestei proceduri în corpul altei proceduri.

Subcomandă privată1_Click()

Aici, când faceți clic pe butonul Command1, apare evenimentul Click și procedura Kvadrat este apelată și executată.

Codul procedurii este executat linie cu linie și de sus în jos.

Funcția (Funcţie) - este o procedură care execută linii din codul său și returnează o anumită valoare. Sintaxa unei funcții simple este:

Funcţie FunctionName() Ca tip de date

... liniicod

FunctionName = ReturnValueFuncția de sfârșit

Domeniul de aplicare al funcției;

Funcție este un cuvânt cheie Visual Basic care indică faptul că este o funcție;

FunctionName () - numele dat funcției;

AS este un cuvânt cheie Visual Basic care precede atribuirea unui tip de date;

DataType tipul de date pentru valoarea returnată;

ReturnValue valoarea care ar trebui să fie atribuită numelui funcției (acesta este un punct foarte important!);

End Function - sfârșitul acestui bloc de cod.

Instrucţiuni

Vizualizați codul sursă folosind sursa acestuia. Fișierul sursă conține codul scris de programator la crearea software-ului, după care este compilat folosind instrumente speciale și transformat într-un fișier de instalare.

Dacă ați pierdut fișierul original cod, sau nu vă este disponibil din alte motive, utilizați programe speciale de decompilare. Sunt disponibile și programe de dezasamblare. Vă rugăm să rețineți că vizualizarea originalului cod poate deveni adesea imposibil în cazurile în care nu știți ce limbaj de programare a fost folosit pentru a-l dezvolta.

Dacă doriți să găsiți cod pentru un program gratuit, faceți o căutare pe Internet. De asemenea, încercați să descărcați acest program iar în meniul său găsiți elementul „Vizualizare sursă cod" Acesta este de obicei disponibil pentru programele redistribuibile.

Fiți atenți când le utilizați, în special acest lucru se aplică programelor care nu au fost descărcate de pe site-ul web al dezvoltatorului, deoarece codul sursă poate conține cod rău intenționat, care, atunci când este instalat pe computer, instalează și troieni, keylogger și așa mai departe.

Fiți atenți când utilizați programe de decompilare, deoarece mulți dezvoltatori de software folosesc programe speciale care fac dificilă recrearea originalului cod. Dacă programul a fost scris în assembler, de asemenea, acceptat programe speciale.

Există destul de multe instrumente de inginerie inversă, nu le folosiți în scopuri frauduloase sau pentru a face modificări la programele cu sursă închisă, deoarece există adesea o anumită răspundere pentru aceste acțiuni în conformitate cu legea.

Sfaturi utile

Nu revizuiți codul programelor închise, cu atât mai puțin faceți modificări la acesta.

Codul programului poate varia în ceea ce privește confidențialitatea - mulți dezvoltatori nu îl fac disponibil public, iar termenii acordului de licență impun restricții utilizatorilor în ceea ce privește utilizarea și vizualizarea acestuia. Există, de asemenea, programe open source care pot fi vizualizate, editate și așa mai departe.

vei avea nevoie

  • - un program pentru deschiderea codului sursă.

Instrucţiuni

Asigurați-vă că codul sursă al software-ului pe care doriți să îl vizualizați este open source. Pentru a face acest lucru, accesați site-ul web oficial al dezvoltatorului de software și vizualizați tipul de licență. Dacă codul sursă al programului este închis, nu îl puteți vizualiza. Acest lucru este incomod, dar cu un astfel de sistem este destul de rar să găsiți copii ale unui program care conține troieni și alte malware. Acesta este principalul dezavantaj al software-ului liber.

Dacă aveți software gratuit, găsiți „Codul sursă” în meniul programului, dacă un astfel de articol este furnizat de dezvoltator, ceea ce este extrem de rar. Pentru a-l vizualiza în alte cazuri, utilizați un asamblator sau alt software terță parte.

Adesea, pentru a deschide sursa, trebuie să știți ce limbaj de programare au folosit creatorii programului în timpul dezvoltării, care este adesea foarte dificil de determinat. Aici puteți instala pe computer un set de diverse programe pentru deschiderea codurilor sursă în care sunt scrise limbi diferite.

Când utilizați software gratuit, dacă aveți opțiunea, verificați codul sursă înainte de procesul de instalare, mai ales dacă programul a fost descărcat dintr-o sursă neoficială. Acest lucru vă va ajuta să vă protejați computerul de malware care este instalat împreună cu cel principal.

De asemenea, nu recurge la diverse metode efectuarea de modificări la codul sursă închis al unui program, adesea în astfel de cazuri există o anumită răspundere pentru încălcarea regulilor contract de licențăîntre utilizator și dezvoltator. Mai mult, nu postați astfel de programe editate pe Internet.

Video pe tema

Sfaturi utile

Verificați sursele de software gratuit.

Posibilitatea de a vizualiza originalul cod diverse site-uri pot fi foarte utile atunci când creați propriile site-uri site-ul. Puteți vedea codul HTML folosind setări speciale și extensii suplimentare de browser, precum și programe pentru vizualizarea fișierelor text.

vei avea nevoie

  • - program browser;
  • - program notepad.

Instrucţiuni

Găsiți elementul de meniu „Cod sursă site” în browser. De exemplu, în Programul Mozilla Firefox poate fi găsit în secțiunea „Dezvoltare web”, care se află în elementul „Instrumente” din meniul principal și în browser de internet Explorer este apelat pentru a vizualiza codul html din elementul „Vizualizare” din meniul principal. Accesați site-ul al cărui cod ați dori să-l studiați. Odată ce pagina se încarcă, selectați instrumentul Sursă site. Programul va afișa o fereastră specială în care veți vedea codul. Dacă conținutul paginii nu este afișat corect, încercați să schimbați codificarea.

Funcțiile standard ale browserului pot fi extinse folosind un plugin. Puteți găsi adesea o extensie pe site-ul web al dezvoltatorului programului care vă permite să vizualizați codul site-ului. De exemplu, pluginul pentru Mozilla Firefox se numește Firebug, pentru browser-ul Opera se numește DragonFly. Descărcați și instalați pluginul. Poate fi necesar să reporniți browserul. Apoi, accesați site-ul dorit. Faceți clic pe butonul pentru a apela consola plug-in - aceasta poate fi amplasată pe unul dintre panourile de lucru ale programului - după care va apărea o fereastră suplimentară în care va fi afișat codul sursă al paginii deschise.

Salvați paginile site-ului web necesare utilizând funcția corespunzătoare de browser. Pentru a face acest lucru, faceți clic pe elementul din meniul principal „Fișier” și selectați „Salvare ca”. Selectați o locație pe computer unde veți salva o copie a paginii. Apoi, în meniul drop-down numit „Tip de fișier”, selectați opțiunea „Pagină web, întreg” sau „Pagină web, numai HTML”. Faceți clic pe „Salvați”. Repetați procedura cu toate paginile necesare ale resursei de Internet. Deschideți folderul în care au fost salvate fișierele. Selectați una dintre pagini și lansați-o folosind programul Notepad. Puteți folosi utilitarul Notepad instalat în sistemul de operare Windows, dar este mai bine să descărcați unul mai convenabil Programul Notepad++. Are o funcție split diferite tipuri etichete html după culoare.

IMEI este o identificare cod mobil telefon. Dacă telefonul dvs. mobil este furat sau pierdut, puteți încerca să-l găsiți folosind aceasta cod y, dacă ceri ajutor de la ofițerii de afaceri interne.

Instrucţiuni

Aflați-vă IMEI telefon formând *#06#. În scurt timp, aceasta va fi afișată pe ecranul telefonului tău mobil. cod. Astfel poți afla IMEI-ul absolut al oricărui model de telefon mobil telefon.

Luați o cutie de la dvs telefonși examinează-l din toate părțile. IMEI-ul unui telefon mobil este de obicei indicat lângă bar cod a și are forma unei serii de numere sau de asemenea linii cod O. Dacă există posibilitatea ca această cutie să cadă în mâinile unor oameni necinstiți, ascunde-o pentru ca aceștia să nu poată profita de neatenția ta.

Examinați documentele pentru dispozitivul dvs. mobil. Acestea conțin de obicei IMEI. Examinați contractul pe care l-ați semnat în magazinul de comunicații la cumpărare telefon. IMEI este listat în aceeași linie cu „Numele modelului”.

Închideți telefonul, deschideți-l coperta din spateși scoateți cu grijă bateria. În interiorul carcasei veți vedea un autocolant cu informații despre producător telefon, modele, precum și identificare cod. Cu toate acestea, pe unele modele de telefoane, este posibil ca IMEI să nu fie indicat ca o serie lungă de numere, ci doar ca un cod de bare. cod O.

Dacă decideți să cumpărați un telefon la mâna a doua, cereți vânzătorului să vă furnizeze toate documentele pentru dispozitivul mobil și verificați IMEI formând *#06# sau deschizând telefonul.

Dacă telefonul este furat sau pierdut, sunați mai întâi operatorul și blocați numărul. După aceasta, contactați poliția și furnizați ofițerilor de afaceri interne toate informațiile pe care le aveți despre momentul și locul răpirii sau dispariției. Dar cel mai important lucru pe care trebuie să le spui este identitatea ta cod dispozitivul dvs. mobil.

Dacă din anumite motive nu ați reușit să aflați IMEI telefon, nu accesați site-uri de internet care oferă o varietate de programe și servicii care se presupune că vă pot ajuta nu numai să aflați cod telefon mobil, dar și deblocați vechea cartelă SIM fără PIN și PUK. Acest lucru nu se poate face fără acces la bazele de date ale operatorilor de telecomunicații. Iar operatorilor de telecomunicații le pasă de securitate la cel mai înalt nivel.

Cheia pe care ați folosit-o pentru a vă activa software-ul nu o puteți vizualiza în mod obișnuit, ca cod de licență program care este stocat în registry și poate fi accesat atunci când este lansat sau utilizând alte programe. Pe baza codului de licență, puteți vizualiza codul de activare pe site-ul oficial al dezvoltatorului programului.

vei avea nevoie

  • - un program pentru vizualizarea codului de licență.

Instrucţiuni

Descărcați Everest 2006 pe computer. Instalează-l și rulează-l. În fereastra principală, selectați software-ul care vă interesează, al cărui cod de licență doriți să îl cunoașteți. Informațiile de care aveți nevoie ar trebui să apară în partea dreaptă a ferestrei. De asemenea, îl puteți salva într-un fișier sau îl puteți imprima. În orice caz, cel mai bine este să stocați astfel de informații nu în formular electronic sau pe suporturi amovibile pe care nu intenționați să le formatați.

Uită-te la codul de licență al programului de pe disc dacă l-ai cumpărat ca produs separat de la computer, pe cutia de pe acesta și așa mai departe. De asemenea, informații despre codul produsului software sunt conținute în registrul sistemului de operare. Pentru a-l rula, deschideți „Run” în meniul „Start” și introduceți regedit în câmpul ferestrei care apare.

Găsiți elementul în directoarele din stânga care este responsabil pentru software. Selectați programul de care aveți nevoie, căutați prin foldere informații despre licență. Copiați-l.

Rescrieți codul de licență obținut folosind una dintre metodele de mai sus. Accesați site-ul web al dezvoltatorului de software, cod de activare care vă interesează. Găsiți punctul de activare și înregistrare a programului, dacă este disponibil pe site. Introduceți codul de licență al produsului software și vedeți codul de activare disponibil pentru acesta. Această metodă este adesea convenabilă în cazurile în care activarea unui produs software este disponibilă pe site.

Dacă această metodă de activare nu este disponibilă pentru programul dvs., aflați codul la reinstalare. Dezinstalați-l complet prin elementul de meniu „Adăugați sau eliminați programe” din panoul de control și ștergeți intrarea de activare, după ce vă asigurați mai întâi că aveți o licență. După instalare, finalizați activarea vizualizând cheia care se potrivește cu codul de licență. Rescrie-l.

Sfaturi utile

Salvați întotdeauna informațiile necesare pentru a activa programul în viitor pentru a nu trece din nou prin procedura de obținere a cheii.

Să ne uităm la cum să determinăm inițiala cod pagini, deoarece acest parametru este foarte important atunci când lucrați pe Internet. Dacă aveți nevoie de știri, etichete sau o poză, dar nu știți cum să o scrieți, puteți oricând să copiați informații de pe alt site după ce ați aflat pe cel original cod pagini dacă nu e pentru cod creat de dezvoltatorii site-ului. Originalul este important codîn fișiere paginate care nu sunt programe, folosind sursa codși puteți lucra cu pagini și le puteți edita.

vei avea nevoie

  • Instrucțiuni pentru vizualizarea codului sursă al paginii.

Instrucţiuni

Pentru a fi vizibil, este înregistrată cu originalul cod ohm Umple-l cu cod Puteți, dacă sunteți proprietarul resursei, sau o puteți modifica folosind notepad, un editor, folosind extensii speciale pentru aceasta. Utilizatorul poate schimba pagina, de asemenea, editând fișierul și adăugând propriul său fișier. În - browsere care vizualizează sursa codși se realizează cu ajutorul diverse echipe, să le privim mai detaliat.

Pentru Internet Explorer, selectați fila „Vizualizare”, apoi „original” cod pagini»sau articolul poate fi selectat făcând clic pe butonul din dreapta al mouse-ului. Pentru a fi criptat de dezvoltatori codîn aceasta mergem la meniul „serviciu”, apoi „instrumente pentru dezvoltatori”, faceți clic pe săgeată, selectați elementul dorit și cod deveni . Apoi, faceți clic pe pictograma și cod V format textși copiați din componentele sale în html.

browser Mozilla Firefox oferă posibilitatea de a vizualiza folosind o comandă simplă „Ctrl+U” sau în meniul „instrumente” selectați subșirul „vizualizare sursă” cod" Puteți vizualiza informații criptate în Mozilla Firefox instalând un dezvoltator web special, selectați „ cod" șir "generat cod" și mai jos pagini apare valoarea originalului cod O. Copiați fișierul în clipboard sau salvați-l cu extensia page.htm.

La folosind Google Chrome în meniul principal „instrumente” selectează subșirul „vizualizează sursa cod", apoi utilizați butonul din dreapta al mouse-ului pentru a deschide elementul „vizualizare cod O pagini» sau folosind tastele „Ctrl + U”.

Pentru browserul Safari, în meniu găsim „view html- cod", tot făcând clic dreapta, deschideți subșirul „view source” sau utilizați comanda rapidă de la tastatură „Ctrl + Alt + U”.

Vă rugăm să rețineți

Capacitatea de a vizualiza informații criptate despre codul sursă se realizează folosind două browsere.

Sfaturi utile

Dacă nu sunteți un dezvoltator de site, puteți schimba pagina numai pentru uzul dvs.

Programul este codul său de licență, pe baza căruia este generat codul de activare. Acest lucru se realizează prin comunicare prin Internet sau prin telefon, unii dezvoltatori oferă și alte metode de activare.

În fiecare zi apar tot mai multe aplicații pentru Android. Milioane de jocuri interesante și programe utile poate fi găsit în Play Market. Toate au o interfață ușor de utilizat și fac față sarcinii. Este greu de imaginat lumea modernă a tehnologiei informației fără ele. Acest articol se adresează persoanelor care nu numai că apreciază funcționalitatea și aspectul aplicațiilor, dar sunt și interesate de structura lor internă.

Dacă te-ai întrebat vreodată ce este „sub capota” aplicației tale preferate și știi puțin despre programare, acest articol este pentru tine. Vă vom spune cum să vizualizați codul sursă al unei aplicații Android direct pe gadgetul dvs. Să mergem!

Informații generale

Majoritatea programelor pentru sistemul de operare Android, la fel ca majoritatea sistemului de operare în sine, sunt scrise într-un limbaj de programare. Aceasta înseamnă că, dacă ne uităm la codul sursă al programelor Android, cel mai probabil vom vedea cod Java folosind SDK-ul Android (care include instrumente Platforme Android). Repet: pentru a înțelege codul sursă al aplicațiilor, trebuie să aveți cunoștințe de bază despre Java și principiile Android.

Cum să aflați codul sursă al aplicațiilor Android?

Mai întâi, descărcați aplicația al cărei cod sursă vă interesează. Apoi accesați Play Market și descărcați un utilitar numit Show Java. Ea va fi cea care va face decompilarea. Instalat? Grozav, acum să trecem la partea distractivă - extragerea codului sursă programe Android. Lansați Show Java.

Selecta aplicația potrivită din cele instalate, sau găsiți-l pe cardul SD. Acum trebuie să selectați un decompilator. De obicei aleg CRF. Dacă aveți probleme, încercați JaDX.

După finalizarea procesului, veți primi o listă de pachete cu Surse Android aplicatii. Desigur, aceasta nu este o copie 100% a codului pe care l-au scris dezvoltatorii acestei aplicații. Dar logica de bază rămâne aceeași și nu este greu de înțeles. Ce să faci cu sursele? Nimic. Uite, aruncă o privire, poate că vei fi interesat de unele „funcții” sau caracteristici ale implementării funcționalității programului.

Titlu:

(Ghidul dezvoltatorului pentru microcontrolerele din familia HCS08)

În Exemplul 12.1, ne vom uita la codul care vă permite să scrieți și să ștergeți datele native din memoria flash. Astfel de acțiuni sunt necesare dacă utilizatorul unui dispozitiv face setări suplimentare pentru acest dispozitiv și dorește ca configurația selectată să fie păstrată după oprirea alimentării.

Anterior, am observat că familia de microcontrolere HCS08 nu permite ștergerea și programarea operațiunilor de memorie flash, executând programul de control al acestor moduri și din memoria flash. Asigurați-vă că mai întâi rescrieți codul programului responsabil pentru operațiunile de ștergere și programare în RAM, apoi rulați acest cod pentru execuție. În timpul procesului de ștergere și programare, modulul de memorie flash va fi tensiune crescută. Cu toate acestea, acest lucru nu va duce la întreruperea programului, deoarece în acest moment momentul în care va fi executat din RAM.

NXP a dezvoltat un set de utilitare în limbaj de asamblare care facilitează crearea propriului cod pentru a programa memoria flash care rulează program de lucru dispozitive. Aceste utilitare sunt localizate în fișier doonsstack.asm. Acest fișier ar trebui inclus în proiect, așa cum se arată în Fig. 12.3.

Orez. 12.3. doonsstack.asm.

Fereastra de proiect cu fișierul inclus doonsstack.asm Conținutul fișierului


prezentat mai jos. Este dat textul original al codului de program utilizat, astfel încât comentariile nu pot fi traduse.
;* Această papetărie este menită să servească drept cadru pentru un *
;* aplicație utilizator. Pentru un program mai cuprinzător care *
;* demonstrează funcționalitatea mai avansată a acestui *
;* procesor, vă rugăm să vedeți aplicațiile demonstrative *
;* situat în subdirectorul exemple al *
;**************************************************************
;* Metrowerks Codewarrior pentru directorul programului HC08 *
; simboluri de export
XDEF DoOnStack
XDEF FlashErase
XDEF FlashProg
; folosim export „Entry” ca simbol. Acest lucru ne permite
; referiți „Entry” fie în fișierul linker .prm

; sau din C/C++ mai târziu
; includ macrocomenzi specifice derivate

Includeți „MC9S08GB60.inc” Două următoarele rânduri

ar trebui să fie necomentate și atribuite valorile dorite.
;mPageErase equ $40
;mByteProg equ $20
mFPVIOL equ $20
mFCBEF equ 80 USD
; secțiunea variabilă/date
MY_ZEROPAGE: SECȚIUNEA SCURTĂ
; Introduceți aici definiția datelor dvs. Pentru demonstrație, se folosește temp_byte.
; temp_byte ds.b 1
; secțiunea de cod
MyCode: SECȚIUNE
;**************************************************************
; această rutină de asamblare se numește aplicație C/C++
DoOnStack: pshx
pshh; salvează indicatorul pentru a clipi
psha; comanda de salvare pe stivă
ldhx #SpSubEnd ;punctează ultimul octet pentru a se muta în stivă;
SpMoveLoop: lda ,x ;citește din flash
psha ;mutare pe stivă
aix #-1 ;următorul octet de mutat
cphx #SpSub-1 ;sfârșit trecut?
bne SpMoveLoop; buclă până la întregul sub pe stivă
tsx ;punctează către sub pe stivă
tpa ;mută CCR în A pentru testare
și #$08 ;verificați masca I
bne I_set ;săriți dacă am setat deja
sei ;block se întrerupe în timp ce FLASH este ocupat
lda SpSubSize+6,sp ;preîncărcare date pentru comandă
cli ;ok pentru a șterge masca acum
bra I_cont ;continuați să stivuiți de-alocarea
I_set: lda SpSubSize+6,sp ;preîncărcare date pentru comandă
jsr ,x ;execută sub-ul pe stivă
I_cont: ais #SpSubSize+3 ;dealocare subcorp + H:X + comandă
Indicatorul flash ;H:X OK de la SpSub
lsla ;A=00 & Z=1 cu excepția cazului în care PVIOL sau ACCERR
rts ;pentru a clipi unde a fost apelat DoOnStack
;**************************************************************
SpSub: ldhx LOW (SpSubSize+4), sp; obțineți adresa flash din stivă
sta 0,x ;scrie pe flash; latch adresă și date
lda SpSubSize+3,sp ;get comandă flash
sta FCMD ;scrie comanda flash
lda #mFCBEF ;mască pentru a iniția comanda
sta FSTAT ; comanda de înregistrare
nu ;[p] vreau min 4~ de la ciclul w la r
ChkDone: lda FSTAT ; deci FCCF este valabil
lsla ;FCCF acum în MSB
bpl ChkDone ;buclă dacă FCCF = 0
SpSubEnd: rts; înapoi în DoOnStack în flash
SpSubSize: equ (*-SpSub)
;**************************************************************
FlashErase: psha; ajusta sp pentru intrarea DoOnStack

lda #mPageErase ;model de mască pentru comanda de ștergere a paginii
bsr DoOnStack ;comandă de finalizare de la sub baza de stivă
rts
;**************************************************************
FlashProg: psha ;salvați temporar datele de intrare
lda #(mFPVIOL+mFACCERR) ;mască
sta FSTAT; anulează orice comandă și șterge erorile
lda #mByteProg ;model de mască pentru comanda byte prog
bsr DoOnStack ;execută codul de prog din stiva RAM
ais #1 ;dealocarea locației datelor din stivă
rts
;**************************************************************

De asemenea, în textul codului programului în C este necesar să se directive #include fișier de conectare doonsstack.h, al cărui text este prezentat mai jos.


/* */
/* Numele proiectului: doonstack.h */
/* Ultima modificare: 04/11/2004 */
/* De către: r60817 */
/* */
/* */
/**********************************************************************/
/* */
/* Descriere: MC9S08GB60_FLASH_DOONSTACK - demo */
/* */
/* */
/* Documentație: MC9S08GB60/D Rev. 2,2 */
/* HCS08RMv1/D Rev. 1(4.8Exemple de aplicații FLASH) */
/* */
/* Acest software este clasificat ca Software Sample de inginerie. */
/* */
/**********************************************************************/
/* */
/* Serviciile efectuate de FREESCALE în această chestiune sunt efectuate CA ESTE */
/* și fără nicio garanție. CLIENTUL își păstrează decizia finală */
/* raportat la designul și funcționalitatea totală a sfârșitul produs. */
/* FREESCALE nici nu garantează și nici nu va fi tras la răspundere de către CLIENT */
/* pentru succesul acestui proiect. FREESCALE RENUNȚĂ TOATE */
/* GARANȚII, EXPRESE, IMPLICITE SAU STATUTARE INCLUSIV, DAR NU */
/* LIMITAT LA GARANȚIA IMPLICITĂ A VANZĂBILITĂȚII SAU ADEVĂRII PENTRU O */
/* SCOP PARTICULAR PRIVIND ORICE CONSULTARE HARDWARE, MINERU SOFTWARE FURNIZAT */
/* LA PROIECTUL PE FREESCALE SAU NU PRODUSUL REZULTAT DIN */
/* SERVICII FREESCALE . ÎN NICIO CAZ FREESCALE NU VA FI RESPONSABIL PENTRU */
/* DAUNE INCIDENTALE SAU CONSECUȚIONALE DECORATE DIN ACEST ACORD. */
/* */
/* CLIENTUL este de acord să-l țină pe FREESCALE inofensiv împotriva tuturor */
/* revendică cereri sau acțiuni ale oricui din cauza oricărei daune sau */
/* vătămare, fie comercială, contractuală sau sinuoasă, în creștere */
/* direct sau indirect ca urmare a sfaturilor sau asistenței */
/* a furnizat CLIENTUL în legătură cu produse, servicii sau bunuri */
/* furnizat în temeiul prezentului acord. */
/* */
/**********************************************************************/
/*
- acest fișier API între main.c și doonstack.asm
*/
#ifndef _doonsstack
#define_doonstack
#ifdef __cplusplus
extern "C" ( /* funcțiile noastre de asamblare au convenția de apelare C */
#endif
void DoOnStack(void); /* prototip pentru rutina DoOnStack */
void FlashErase(unsigned char *); /* prototip pentru rutina FlashErase */
/* Comanda de ștergere a paginii */
void FlashProg(unsigned char *, unsigned char); /* prototip pentru rutina FlashProg */
/* Comanda programului octet */
#ifdef __cplusplus
}
#endif

#endif /* _doonsstack */
/**********************************************************************/

În exemplul nostru, un bloc de 512 octeți este rezervat pentru înregistrarea datelor nevolatile. Această dimensiune a blocului a fost aleasă deoarece este cantitatea minimă de celule de memorie flash permisă pentru ștergere în microcontrolerul MC9S08QG8. Blocul selectat va fi situat la începutul spațiului de adrese al memoriei flash rezidente a MK: de la 0xE000 la 0xE1FF. Codul programului va începe la adresa 0xE200 și poate ocupa spațiu de adresă până la 0xFFFF.

Pentru a implementa plasarea intenționată a datelor și a codurilor de program, ar trebui să modificați setările linkerului din fișier proiect.prm.

În proiectul standard a existat o intrare:


ROM = READ_ONLY 0xE000 TO 0xFFAD;

Ar trebui inlocuit:

SEGMENTE /* Aici sunt listate toate zonele RAM/ROM ale dispozitivului */
ROM = READ_ONLY 0xE200 TO 0xFFAD;

În exemplul nostru, este utilizat și modul de protecție la scriere al zonei de cod de program, adică. spațiu de adrese de la 0xF200 la 0xFFFF. În fig. Figura 12.4 prezintă procesul de generare a codului pentru registrul FPROT, care protejează spațiul de adrese 0xF200...0xFFFF de ștergerea/scrierea accidentală. Cei mai semnificativi șapte biți ai ultimei adrese 0xF1FF a spațiului de adrese neprotejat trebuie să fie scriși în registrul FPROT.

Adresa A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
0xE1FF 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1
FPROT FPS7 FPS6 FPS5 FPS4 FPS3 FPS2 FPS1 FPDIS
0xE0 1 1 1 0 0 0 0 0

Orez. 12.4.

Formarea unei înregistrări de cod de securitate pentru registrul FPROT.

Exemplul 12.1. Operații cu date nevolatile în memoria flash
// Placă demonstrativă DEMO9S08QG8
// șterge/scrie/citește memoria flash rezidentă
#include /* pentru macrocomanda EnableInterrupts */
#include "derivative.h" /* include declarații periferice */
#include "hcs08.h" /* Acesta este fișierul nostru de declarație! */
#include „doonstack.h”
#define BUSCLK 8000000
#define vFCDIV (BUSCLK/200000-1)
char fdata, operare;
unsigned int faddress;
// Atribuiți o zonă de adrese protejată la scriere: de la 0xE200 la 0xFFFF
const byte NVPROT_INIT @0x0000FFBD = 0xE0;
// Inițializarea MK
{
void mcu_init(void)
SOPT1 = bBKGDPE; // Activați funcția de linie de depanare BKGD
ICSSC = NV_FTRIM; // Scrieți valoarea de tăiere FTRIM
ICSTRM = NV_ICSTRM; // Scrieți valoarea TRIM trim
ICSC2 = 0; // ICSOUT = DCOOUT / 1
// BUSCLK = 8 MHz
FCDIV = vFCDIV; // Scrieți valoarea codului divizor pentru frecvența FCLK
}
// (FCLK = 200 kHz)
#pragma inline
// Funcție pentru citirea unui octet dintr-o celulă de memorie cu o adresă dată
{
char flash_read (adresă int nesemnată)
unsigned char *pointer;
pointer = (char*) adresa;
}
return (*pointer);
// Funcție pentru scrierea unui octet într-o celulă de memorie cu o adresă dată
{
char flash_read (adresă int nesemnată)
unsigned char *pointer;
char flash_write (adresă int nesemnată, date char nesemnate)
FlashProg(pointer,date); // Apelați funcția de programare flash
dacă (FSTAT_FACCER) date=1; else data=0;
if (FSTAT_FPVIOL) date|=2;
}
returnare(date);
// Funcție pentru ștergerea unui bloc specificat în zona de memorie flash
{
unsigned char flash_sector_erase (adresă int nesemnată)
unsigned char *pointer;
unsigned char *pointer, res;
FlashErase(pointer);
if (FSTAT_FACCERR) res=1; else res=0;
if (FSTAT_FPVIOL) res|=2;
}
return(res);
{
void main(void)
mcu_init();
fdata = 0;
faddress = 0xE000;
operare = 0;
{
în timp ce (1)
{
comutator (operare)
cazul 1: // Șterge bloc
fdata = flash_sector_erase(faddress);
operare = 0;
pauză;
cazul 2: // Scrie un octet
faddress = 0xE000;
operare = 0;
fdata = flash_write(faddress,fdata);
cazul 3: // Citiți octetul
faddress = 0xE000;
operare = 0;
}
}
}

Să luăm în considerare metodologia de testare a codului de program din Exemplul 12.1. Pentru a face acest lucru, în fereastra de depanare Date hai sa adaugam trei variabile: faddress, fdata, operare. De asemenea, vom seta fereastra în modul de actualizare periodică, de exemplu, la fiecare 200 ms.

Înainte de a rula codul programului, scrieți-l într-o variabilă faddress adresa pentru scriere și într-o variabilă fdata— octetul de date de scris. Lângă variabilă operare notează codul 0x02. După rularea codului exemplu, va începe să scrie un octet de date în celula de memorie flash selectată. Vă rugăm să rețineți că celula selectată trebuie să fie într-o stare ștearsă, de ex. ar trebui să conțină codul 0xFF.

Pentru a șterge blocul de memorie 0xE00...0xE1FF, scrieți la faddress orice adresă din intervalul specificat și setați variabila operareîn 1. Apoi, rulați din nou codul pentru execuție.

Citirea datelor din memoria flash este, de asemenea, ușoară. Pentru a face acest lucru, scrieți în variabilă faddress codul adresei, într-o variabilă operare- cod 0x03. Conținutul celulei de memorie flash selectată va fi afișat în variabilă fdata după executarea codului programului.

Vă rugăm să rețineți că funcțiile flash_write()Şi flash_sector_erase() returnează o variabilă de tip muncă de sezon cu un cod de eroare la efectuarea acțiunii: 0 - nu a fost nicio eroare, 0x02 - a existat o eroare de acces, 0x04 - a existat o încercare de ștergere/scriere a spațiului de adrese protejat. Ambele funcții menționate mai sus necesită aproximativ 35 de octeți de memorie stivă pentru a fi executate. Dacă suprafața reală a stivei este mai mică, va apărea o eroare fatală. Va fi posibil să restabiliți funcționalitatea programului numai prin resetarea MK.

Pentru a vedea modificările memoriei flash în depanator, trebuie să faceți unele modificări în configurația debuggerului. Urmând setările implicite, depanatorul citește zona de memorie flash MCU o singură dată după începerea unei sesiuni de depanare. Pentru a modifica configurația, selectați opțiunea din meniul principal de depanare MultilinkCyclonPro > Depanare hartă memorie. Se va deschide fereastra prezentată în fig. 12.5, a. Selectați în această fereastră bloc de memorie 3și apăsați butonul Modificare/Detalii. În noua fereastră prezentată în Fig. 12.5, b, selectați opțiunea marcată. Acest lucru va permite depanatorului să actualizeze periodic fereastra de memorie.

Orez. 12.5.