Tuesday, September 26, 2017

Root Linux Android

සරලව පැහැදිලි කරනවා නම් Linux ඇතුලාන්තයේ ඉඳන්ම multi-user සිංහලෙන් නම් බහු පරිශීලක පහසුකම් තියෙන පද්දතියක්, ඉතින් මේ පද්දතියේ user-account හදන්න පුළුවන් හිටු කියලා ඒ වගේම ඒ හදපු user account වලට පද්දතියේ මොන මොන දේවල්ද හසුරවන්න අවසර තියෙන්නේ කියන එක කියලා දෙන්න පුළුවන්, එතකොට ඒවා අර දුන්න අවසරයන්ට පිට කිසි සේත්ම වැඩ කරන්නේ නැහැ, එහෙම වැඩ කරනවානම් එදාට Facebook, Google වැනි සමාගම් වල මළගම සනිටුහන් කරන දවස වේවි,  ඉතින් Android වල මං දැකපු දෙයක් තමයි app එකක් install කරනකොටම ඒ app එක වෙනුවෙන් Linux user account එකක් හදලා දෙන එක ඊට පස්සේ ඒ user account ටික group එකකට හෝ කිහිපයකට ඇතුලත් කරනවා, උදාහරණයක් විදිහට sdcard_r කියන group එකට ඇතුලත් වුනු සියලුම user accounts වලට හැකියාවක් තියෙනවා External Memory එකේ data ලියන්න කියවන්න, තවත් සරලව පැහැදිලි කරනවා නම් ඔයා install කරා xxx කියන app එකක් ඒ app එකට a650 කියල linux user account එකක් හදුනා, මේ user account එක sdcard_r කියන group එකේ නැත්තම් එයාට බැහැ External Memory එකේ data ලියන්න. අනිත් එක මං කිඋවා android වල හැම app එකක්ම වෙන වෙන user account වල තියෙන්නේ කියලා, Linux permissions හදලා තියෙනවා ඒ ඒ user ට වෙන users ලගේ directory වලට access කරන්න බැරි විදිහට, එකිඋවේ එක app එකකට බැහැ තව app එකක folder එක ඇතුලේ data වෙනස් කරන්න. ඉතින් මේ වගේ ගොඩාක් බාදක දාල තියෙනවා Security එක වෙනුවෙන්. හැබැයි Linux වල ඉන්නවා කිසිම බාදාවක් නැතුව සම්පූර්ණ පද්දතියේම ඕනෑම තැනක data ලියන්න කියවන්න පුළුවන් user කෙනෙක්. මෙයාට system එකේ නීති රීති රෙගුලාසි කින්ද මන්ද බයිලා මොකුත් අදාළ නැහැ මෙයාට පුළුවන් පද්දතියේ ඕනෑම තැනක දත්ත ලියන්න කියවන්න. ඉතින් GNU Linux වල user account අතරේ මාරුවෙන්න binary වලින් එලෙක්ට්‍රොනික බාෂාවෙන් ලියපු executable එකක්(මොකක් හරි software එකක් කියලා හිතාගන්නකෝ) තියෙනවා, මේ executable එක පාවිච්චි කරලා තමයි Linux වල users අතරේ මාරුවෙන්නේ, සරලව පැහැදිලි කරනවා නම් ඔයාගේ Linux computer එකේ Amara සහ Kamal කියලා users ලා දෙන්නෙක් ඉන්නවා දැන් අමර එයාගේ account එකෙන් computer එකේ log වෙලා ඉන්නවා, මෙයාට හදිස්සියේ උවමනාවෙනවා කමල් ගෙ account එකෙන් log වෙන්න, අමර ඒක කරගන්න Linux පද්දතියට විධාන කරනවා "su kamal" එතකොට දැන් අමර කමල් විදිහට ලොග් වෙලා කමල් ගේ browser history එක බලනවා email කියවනවා හරි කැත වැඩ ඕවා... ඒ පාර අමර දැක්කා කමල් මොකද්ද GB 2 ක 3ක movie එකක් download කරලා තියෙනවා, අමර movie එක බලන්න උත්සහ කරනකොට mp4 play කරන්න computer එකේ Player එකක් නැහැ, දැන් අමර පද්දතියට විධාන කරනවා apt-get install vlc කියලා එතකොට Linux එකෙන් කියනවා "VLC install කරන්න අවසර නැහැ කියල " මොනවද කරන්නේ අවසර තියෙන user කෙනෙක්ට මාරුවෙන්න ඕන ඒකට පද්දතියට විධාන කරනවා su root කියල,  දැන් අමර root user ට මාරුවෙලා ඉන්නේ, මං කලින් කිඋවා root user ට තියෙනවා System එකේ හැම තැනම දත්ත ලියන්න කියවන්න අවසර තියෙනවා කියලා. ඉතින් අර users අතරේ මාරුවෙන්න හැකියාව දීල තියෙන su binary එක Android Linux වල එන්නේ නැහැ root කරනවා කියලා කට්ටිය කරන්නේ මේ binary එක අදාළ path එකට copy කරන එක තමා, ඉතින් මේ දේ කරන්න බැහැ System එකට log වෙලා ඉන්නකොට මොකද සියලුම නීති රීති කොන්දේසි වලට යටත් වෙලයි System එක on වෙලා තියෙන්නේ, හැබැයි පිට system එකකින් access කරද්දී මේ බයිලා මොකුත් අදාළ නැහැ. ඉතින් recovery එක කියන්නෙත් වෙනම operating system එකක් ඒකයි recovery එකෙන් ගිහිල්ලා කට්ටිය su සහ අදාළ files ඇතුලත් zip එක unzip කරන්නේ. හැබැයි එක දෙයක් system partition එක encrypt කරලා තිබ්බොත් මේ දේ recovery එකෙන් කරන එක ටිකක් අමාරුයි බැරිම නැහැ, ඉතින් මේ su binary එක අතින් copy කරන එක හැමෝටම කරන්න බැරි නිසයි rooting tools කියලා එක එක tools හැට හුටාමාරක් තියෙන්නේ.

Sunday, September 10, 2017

Java Byte Code, Interpreter and JIT

සාමන්යෙන් program එකක් intermediate ආකාරයට compile කරලා ඒක virtual machine එකකින් interpret (අර්ථ වින්‍යාස කරොත් / පහදලා දුන්නොත්) ඒක කෙලින්ම executable code එකට compile කරලා run කරනවට වඩා. මන්දගාමී වෙනවා. 
කෙසේ වෙතත් Java සමග මේ දෙකේ වෙනස සාමාන්‍ය අවශ්‍යතා සඳහා එතරම් වැදගත් වෙන්නේ නැහැ. මොකද byte code හොඳට optimize කරලයි තියෙන්නේ. එනිසා අපි හිතනවට වඩා වේගයෙන් byte code execute වෙනවා.
Java නිර්මාණය කරලා තියෙන්නේ Interpreted language එකක් විදිහට, ඉතින් Java ළඟ මොකුත් නැහැ, වේගය වැඩි කිරීම සඳහා byte code, native code බවට පත්කිරීමේ on the fly compilation එක නතර කරන්න, 
මේ හේතුව නිසා HotSpot තාක්ෂණය හඳුන්වලා දුන්නා Java හි ප්‍රථම එළිදක්මෙන් පසු ඉක්මනින්ම. ඉතින් මේ HotSpot තාක්ෂණය මගින් byte code සඳහා Just in time (JIT) compiler එක සපයනවා. JIT compiler එකත් JVM එකේම කොටසක් ඉතින් මේකෙන් කරන්නේ තෝරාගත් byte code අවශ්‍යතාවයන්ට අනුව කොටස්, කොටස් වශයෙන් real time binary බවට පත් කරණ එක(ඒ කියන්නේ program එක run කරණ අවස්ථාවේ), අපි සැලකිලිමත් ව තේරුම් ගත යුතු දෙයක් තමයි Java, program එකක් සම්පූර්ණයෙන්ම compile කිරීම ප්‍රයෝගික නැහැ කියන එක. මොකද Java මගින් විවිද run time පරීක්ෂාවන් සිදු කරනවා, ඉතින් ඒවා කරන්න පුළුවන්නේ run time එකේදී විතරයි,
ඒ වෙනුවෙන් තමා JIT compiler එක අවශ්‍යතාවයන්ට අනුව, සම්පූර්ණ program එක නෙවෙයි අවශ්‍ය කොටස් ධාවන අවස්තාවේදී compile  කරන්නේ, ඉතුරු byte code සාමාන්‍ය ආකාරයට interpret  කරනවා. ඕක තමා JIT එකෙන් ලැබෙන ප්‍රයෝජනය. 
කෙසේ වෙතත්  JIT එක මගින් performance සදහා වැදගත් මෙහෙයක් ඉටුවෙනවා. 
byte code සඳහා dynamic compilation (JIT) භාවිත උනත් portability එක සහ safety features (JIT කරපු)ඒවටත් අදාළ වෙනවා. මොකද execution කාර්ය කරන්නේ JVM එක නිසා.
* Interpreter මගින් කරන්නේ line by line machine code එකට පරිවර්තනය කරණ එක 
* JIT මගින් කරන්නේ කොටස් වශයෙන් machine code එකට පරිවර්තනය කරණ එක 
ඉතින් JIT වේගවත් ධාවන අවස්ථාවේදී එකින් එක Translate කරන්නේ නැතුව අවශ්‍ය කොටසම compile කරණ නිසා.