Meqenese kjo kollone ka te beje me programimin, debati natyrshem zhvillohet brenda kontureve te programimit (edhe mbi subjektin e mbrojtjes). Nje diskutim mbi mbrojtjen ligjore, jo vetem do ishte i pavend ketu, por do ishte pa vend edhe ne kontekstin e realitetit Shqiptar.
Fjalorin tim mund ta shkarkosh ne www.intein-nt.com
Meqe e shkela fjalen per te mos shkruar mbi kete teme, po e shkel me te dy kembet duke e plotesuar me nja dy detaje praktike mesazhin tim te meparshem.
Konkretisht, une flisja per nje funksion te ruajtur brenda nje bitmapi, te cilin programi e ngarkonte ne memorje per ta ekzekutuar.
Kodi:
HRESULT FunksionIntim (LPCWSTR wzText, DWORD dwCount)
{
…
};
void FunksioniPasues ()
{
};
// Per ta ruajtur funksionin FunksionIntim nje nje file (psh.)
// mund te shkruanim dicka te tille:
PBYTE pb1 = (PBYTE)FunksionIntim,
pb2 = (PBYTE)FunksionPasues;
DWORD dw = 0;
WriteFile (
hFile, // e kemi krijuar me pare me CreateFile()
(void*)pb1, // adresa ku fillon blloku ne memorje qe duam te ruajme
PtrToUint(pb2 – pb1), // numri i byte-ve qe duam te ruajme
&dw, // numri i byte-ve qe u shkruan faktikisht
NULL // LPOVERLAPPED
);
Tani le te supozojme se ne nje fare menyre e kemi ngarkuar ne memorje kete bllok byte-sh (qe perfaqesojne funksionin) dhe kemi nje pointer pByte qe shenon tek ai, si mund ta therrasim funksionin? Ne nje veshtrim te pare mund te duket si dicka qe kerkon “t’i besh duart pis me assembler”, por faktikisht eshte dicka qe mund te realizohet fare lehte ne C
Kodi:
typedef HRESULT (TFunksionIntim*)(LPCWSTR, DWORD);
TFunksionIntim *pfnFunksionIntim = (TFunksionIntim)pByte;
// Ne kete pike mund ta therrasim funksionin tone si me poshte:
pfnFunksionIntim (L”tekst”, 6);
C-ja merr persiper “futjen e argumentave ne stack” dhe transferimin e “fokusit” te procesorit ne funksionin tone (i cili natyrisht nuk eshte me pjese e exe-se).
E gjitha kjo funksionon per bukuri nese funksioni yne “FunksionIntim” nuk therret ndonje funksion tjeter. Ne rast se nga brendesia e FunksionIntim therriten funksione te tjere (qofte te shkruar nga ne, qofte te OS-se), adresat e ketyre funksioneve i duhen dhene funksionit FunksionIntim me ane te nje argumenti qe mund te jete nje pointer ne nje structure pointerash ne keta funksione.
Thelbi i gjithe kesaj eshte ky: Njerezit nuk mund t'i lexojne dot programet (ne asm) me sy te lire, por ekzistojne nje mori tool-sash qe te ndihmojne ne kete proces. Megjithate keto "tool-sa" jane ne gjendje te lexojne/interpretojne vetem instruksione qe gjenden si pjese e nje file ne nje format standart (psh. PE qe perfshin *.exe, *.dll). Nese ne e ruajme ndonje funksion nje nje file tjeter (psh. brenda nje bitmapi), tool-sa te tille nuk pine shume uje.
Para ca ditesh degjova ne lajme se BE-ja ka ndermend t'i vere nje tjeter gjobe Microsoft-it per shkak se ky i fundit nuk publikon "te perbrendshmet" (the internals) e OS (cka i ve ne pozita "jo te barabarta" prodhuesit Europiane te sofwereve, te cilet me sa duket kane vene ne levizje BE-ne).
Pyetja qe me lindi ne koke (duke pare ne kete kollove vete-besimin e admirueshem te disave mbi mundesine e leximit te c'do programi ne asm, madje edhe te programeve qe me "vetedije" perpiqen ta sabotojne kete proces), se perse valle prodhuesit Europiane te softwereve nuk i pervishen leximit ne asm te "Windows binaries", por i "qahen" BE-se?
Krijoni Kontakt