හැදින්වීම
සිප් බෝම්බ , එක්ස්එම්එල් බෝම්බ ආදිය ගැන ඔබ බොහෝ විට හුරුපුරුදු ය . සරලව කිවහොත්, ඒවා (සාපේක්ෂව) නව මෘදුකාංග මගින් අර්ථ නිරූපණය කිරීමේදී දැවැන්ත ප්රතිදානයක් ලබා දෙන කුඩා ලිපිගොනු ය. මෙහි ඇති අභියෝගය වන්නේ සම්පාදකයෙකු එකම ආකාරයකින් අපයෝජනය කිරීමයි.
අභියෝගය
බයිට් 512 ක් හෝ ඊට අඩු ප්රමාණයක් ඇති සහ හැකි ඉඩ ප්රමාණයක් ඇති ගොනුවකට සම්පාදනය කරන ප්රභව කේත කිහිපයක් ලියන්න. විශාලතම ප්රතිදාන ගොනුව ජය ගනී!
නීති
හරි, එබැවින් වැදගත් පැහැදිලි කිරීම්, අර්ථ දැක්වීම් සහ සීමාවන් කිහිපයක් තිබේ;
- සම්පාදනයේ ප්රතිදානය ඊඑල්එෆ් ගොනුවක්, වින්ඩෝස් අතේ ගෙන යා හැකි ක්රියාත්මක කළ හැකි (.exe) හෝ ජේවීඑම් හෝ .නෙට් හි සීඑල්ආර් සඳහා අථත්ය බයිට් කේතයක් විය යුතුය (වෙනත් වර්ගවල අථත්ය බයිට් කේතය ඉල්ලුවහොත් හරි වනු ඇත). යාවත්කාලීන කිරීම: පයිතන්ගේ .pyc / .pyo ප්රතිදානය ද ගණන් කරයි.
- ඔබේ තේරීමේ භාෂාව එම ආකෘතිවලින් එකකට කෙලින්ම සම්පාදනය කළ නොහැකි නම්, සම්පාදනය කිරීමෙන් පසුව සම්ප්රේෂණය කිරීමට ද අවසර දෙනු ලැබේ ( යාවත්කාලීන කිරීම: ඔබට එකම භාෂාව එක වරකට වඩා භාවිතා නොකරන තාක් කල් ඔබට කිහිප වතාවක් සම්ප්රේෂණය කළ හැකිය ).
- ඔබේ ප්රභව කේතයට බහු ලිපිගොනු වලින් සමන්විත විය හැකි අතර සම්පත් ලිපිගොනු පවා තිබිය හැක, නමුත් මෙම සියලු ගොනු වල සාරාංශ ප්රමාණය බයිට් 512 නොඉක්මවිය යුතුය.
- ඔබේ මූලාශ්ර ගොනුව සහ ඔබේ තේරීමේ භාෂාවේ සම්මත පුස්තකාලය හැර වෙනත් ආදානයක් භාවිතා කළ නොහැක. සම්මත පුස්තකාල සඳහා ස්ථිතික සම්බන්ධ කිරීම සහය දක්වන විට හරි. විශේෂයෙන්, තෙවන පාර්ශවීය පුස්තකාල හෝ මෙහෙයුම් පද්ධති පුස්තකාල නොමැත.
- විධානයක් හෝ විධාන මාලාවක් භාවිතා කරමින් ඔබේ සම්පාදනය කිරීමට හැකි විය යුතුය. සම්පාදනය කිරීමේදී ඔබට නිශ්චිත කොඩි අවශ්ය නම්, මේවා ඔබේ බයිට් සීමාව දෙසට ගණනය කරයි (උදා: ඔබේ සම්පාදන රේඛාව නම්
gcc bomb.c -o bomb -O3 -lm
,-O3 -lm
කොටස (බයිට් 7) ගණනය කරනු ලැබේ (ආරම්භක ප්රමුඛ අවකාශය ගණන් නොගනී). - පෙර සැකසුම්කරුවන්ට අවසර දී ඇත්තේ ඒවා ඔබේ භාෂාව සඳහා සම්මත සම්පාදන විකල්පයක් නම් පමණි .
- පරිසරය ඔබට භාරයි, නමුත් මෙය සත්යාපනය කිරීමේ අවශ්යතාවයන් සඳහා, කරුණාකර මෑත කාලීන (එනම් ලබා ගත හැකි) සම්පාදක අනුවාද සහ මෙහෙයුම් පද්ධති වෙත ඇලී සිටින්න (සහ පැහැදිලිවම ඔබ භාවිතා කරන්නේ කුමක්ද යන්න සඳහන් කරන්න).
- එය දෝෂයකින් තොරව සම්පාදනය කළ යුතුය (අනතුරු ඇඟවීම් හරි), සහ සම්පාදකයා බිඳ වැටීම කිසිවක් සඳහා ගණන් නොගනී.
- ඔබගේ වැඩසටහන ඇත්ත වශයෙන්ම කරන දෙය අදාළ නොවේ, එය අනිෂ්ට කිසිවක් විය නොහැක. එය ආරම්භ කිරීමට පවා හැකියාවක් නැත.
උදාහරණ 1
සී වැඩසටහන
main(){return 1;}
Apple LLVM version 7.0.2 (clang-700.1.81)
OS X 10.11 (64-bit) සමඟ සම්පාදනය කර ඇත:
clang bomb.c -o bomb -pg
බයිට් 9228 ක ගොනුවක් නිෂ්පාදනය කරයි. මුළු ප්රභව ප්රමාණය 17 + 3 (සඳහා -pg
) = බයිට් 20 වන අතර එය පහසුවෙන් ප්රමාණයේ සීමාව තුළ වේ.
උදාහරණ 2
බ්රේන්ෆක් වැඩසටහන:
++++++[->++++++++++++<]>.----[--<+++>]<-.+++++++..+++.[--->+<]>-----.--
-[-<+++>]<.---[--->++++<]>-.+++.------.--------.-[---<+>]<.[--->+<]>-.
ඇවිබ් සමඟ සී සමඟ පරිවර්තනය කර ඇත්තේ:
./awib < bomb.bf > bomb.c
ඉන්පසු Apple LLVM version 7.0.2 (clang-700.1.81)
OS X 10.11 (64-bit) සමඟ සම්පාදනය කරයි :
clang bomb.c
බයිට් 8464 ක ගොනුවක් නිෂ්පාදනය කරයි. මෙහි සම්පූර්ණ ආදානය බයිට් 143 කි ( @lang_c
අවීබ් සඳහා පෙරනිමිය බැවින් එය ප්රභව ගොනුවට එක් කිරීමට අවශ්ය නොවීය, තවද එක් විධානයක විශේෂ කොඩි නොමැත).
මෙම අවස්ථාවේ දී, තාවකාලික බෝම්බ සී ගොනුව බයිට් 802 ක් වන නමුත් මෙය ප්රභවයේ ප්රමාණයට හෝ ප්රතිදාන ප්රමාණයට ගණන් නොගනී.
අවසාන සටහන
4GB කට වඩා වැඩි නිමැවුම් (කවුරුහරි වූ ටියුරින්ග් සම්පූර්ණ preprocessor සම්බ සමහර විට නම්) ලබා ගෙන ඇත නම්, තරඟය සඳහා වනු ඇත කුඩාම ප්රභවය වූ බව ඊයේ ප්රමාණයේ ගොනුවක් නිපදවන (එය පමණක් ලබා ඇති ටෙස්ට් කරුණු ඉදිරිපත් කිරීමට ප්රායෝගික දෙයක් ද විශාල) .