সিগিল ছুড়ে দেওয়ার জন্য সবচেয়ে সংক্ষিপ্ত কোড code


76

পটভূমি

সিগসাইজিভি নিক্ষেপ করার বিষয়ে ইতিমধ্যে আমাদের একটি চ্যালেঞ্জ রয়েছে , তবে সিগিল নিক্ষেপ করার বিষয়ে কেন চ্যালেঞ্জ নেই?

সিগিল কী?

প্রসেসরের অবৈধ নির্দেশের জন্য সিগিল হ'ল এটি খুব কমই ঘটে। সিগিল পাওয়ার পরে ডিফল্ট ক্রিয়াটি প্রোগ্রামটি শেষ করে একটি কোর ডাম্প লিখছে। সিগিলের সিগন্যাল আইডি ৪. আপনি খুব কমই সিগিলের মুখোমুখি হন এবং এটির মাধ্যমে আপনার কোডটিতে কীভাবে এটি উত্পন্ন করা যায় তা সম্পর্কে আমার কোনও ধারণা নেই sudo kill -s 4 <pid>

বিধি

আপনার প্রোগ্রামগুলিতে মূল থাকতে হবে তবে আপনি যদি কোনও কারণে না চান তবে আপনি একটি সাধারণ ব্যবহারকারীও ব্যবহার করতে পারেন। আমি জার্মান লোকেলের সাথে একটি লিনাক্স কম্পিউটারে আছি এবং আমি ইংরেজী পাঠ্যটি জানি না যা سگিল ধরার পরে প্রদর্শিত হয়, তবে আমি মনে করি এটি 'অবৈধ নির্দেশ' এর মতো কিছু। সংক্ষিপ্ততম প্রোগ্রাম যা সিগিল জিততে পারে।


6
নির্দেশটি কার্নেল দ্বারা উত্পন্ন করতে হবে কিনা তা আপনি পরিষ্কার করতে চাইতে পারেন। বিশেষত, আপনি কি প্রোগ্রামটি সরাসরি libc কল ব্যবহার করে এটি তৈরি করার অনুমতি দিতে চান raise(SIGILL)?

1
এটা সত্যিই বলে না Illegal instruction (core dumped)
এরিক দি আউটগল্ফার

@ ais523 সবকিছুর অনুমতি আছে।
মেগা ম্যান

5
সিগিল বাড়াতে পারে এমন কোনও হার্ডওয়্যারের ক্ষেত্রে উত্তরটি নির্দেশের দৈর্ঘ্যের সমান হবে। স্রেফ কোথাও একটি অবৈধ নির্দেশ দিন এবং এটি কার্যকর করার চেষ্টা করুন। একমাত্র আকর্ষণীয় জিনিস হ'ল জড়িত সংশ্লেষিত সরঞ্জামচয়ন।
অরেঞ্জডোগ

3
* পুরানো প্রোগ্রামগুলি পোস্ট করা লোকেরা তাদের কাজ করেছিল না *
রুডলফ জেলিন

উত্তর:


112

PDP-11 এসেমব্লার (ইউনিক্স ষষ্ঠ সংস্করণ), 1 বাইট

9

নির্দেশ 9 পিডিপি -11-তে কোনও বৈধ নির্দেশনা নয় (অষ্টালে, এটি হবে 000011, যা নির্দেশের তালিকায় প্রদর্শিত হবে না (পিডিএফ))। ইউএনআইএক্স সিক্সথ সংস্করণের সাহায্যে জাহাজীকারী পিডিপি -11 এসেম্বলারের স্পষ্টতই ফাইলটিতে এটি বোঝে না এমন সমস্ত কিছু প্রতিধ্বনিত করে; এই ক্ষেত্রে 9 টি একটি সংখ্যা, সুতরাং এটি একটি আক্ষরিক নির্দেশ জেনারেট করে 9.। এটিতে অদ্ভুত সম্পত্তি (আজকাল অ্যাসেম্বলি ভাষায় অস্বাভাবিক) রয়েছে যা ফাইলগুলি শুরু থেকে চলতে শুরু করে, সুতরাং প্রোগ্রামটি তৈরি করার জন্য আমাদের কোনও ঘোষণার দরকার নেই হবে।

আপনি এই এমুলেটরটি ব্যবহার করে প্রোগ্রামটি পরীক্ষা করতে পারেন , যদিও আপনাকে প্রোগ্রামটি ইনপুট করার জন্য কিছুটা লড়াই করতে হবে।

ফাইল সিস্টেম, সম্পাদক, টার্মিনাল এবং অনুরূপ জিনিসগুলি কীভাবে ব্যবহার করতে হবে তা আপনি কীভাবে ব্যবহার করবেন তা ভেবে দেখে কীভাবে জিনিসগুলি শেষ হয়ে যায় তা এখানে:

% a.out
Illegal instruction -- Core dumped

আমি ডকুমেন্টেশনের মাধ্যমে নিশ্চিত করে দিয়েছি যে এটি একটি আসল SIGILLসংকেত (এবং এটির একই সংকেত সংখ্যা ছিল, 4, তখনও পুরো পথ!)


1
এর একই সংকেত নম্বর ছিল কারণ পসিক্স এবং ইউনিক্স এবং এসইউএস একে অপরের সাথে জড়িত :)
বিড়াল

4
ভি 6-তে প্রায় সমস্ত সিগন্যাল সংখ্যার আজও একই অর্থ রয়েছে; স্মৃতিবিদ্যার সংখ্যা আসলে সংখ্যার চেয়ে কম স্থিতিশীল ছিল। তুলনা করুন minnie.tuhs.org/cgi-bin/utree.pl?file=V6/usr/sys/param.h সঙ্গে github.com/freebsd/freebsd/blob/master/sys/sys/signal.h - জন্য অভিন্ন শব্দার্থবিদ্যা 1 থেকে 13 পর্যন্ত, তবে কেবল 1, 2 এবং 13 এর ঠিক একই নাম রয়েছে। (সিগন্যালআরএম / ১৪ এবং সিগনটার / ১৫ কেবলমাত্র ভি 7 তে যুক্ত করা হয়েছিল।) (সিস্টেম ভি বংশের বেশ কয়েকটি পরিবর্তন হয়েছে, বিশেষত সিগবাসকে 10 থেকে 7 (অব্যবহৃত সিগেম্ট প্রতিস্থাপন করে) এবং 15-র উপরে সিগসাইএসকে স্থানান্তরিত করার জন্য) SIGUSR2।)
zwol

4
@ কেট পসিক্স এবং এসইএস আসলে সংকেতগুলির মান নির্দিষ্ট করে না - কিল কমান্ডের পক্ষে যুক্তি হিসাবে পাস করার সময় তারা কয়েকটি সংখ্যার অর্থ নির্দিষ্ট করে, কিন্তু সিগিল অন্তর্ভুক্ত নয়।
র্যান্ডম 832

7
a.outএটিতে একাধিক বাইট রয়েছে, প্রকৃতপক্ষে ( 9নির্দেশটি দুটি বাইটে সংকলিত হয়, এবং সমাবেশটি প্রোগ্রামটি কার্যকর করার জন্য একটি শিরোনাম এবং পাদচরণ যোগ করে)। এজন্য আমি মেশিন কোডে নয়, সমাবেশটি ভাষায় প্রোগ্রামটি লিখেছিলাম। অ্যাসেম্বলি ল্যাঙ্গুয়েজ প্রোগ্রামটির একটি মাত্র বাইট রয়েছে এবং আরও বাইটস সহ একটি প্রোগ্রাম সংকলন করে; এটি একটি কোড-গল্ফ সমস্যা (উত্সের আকারকে হ্রাস করুন), কোন ছিটেফোঁটা সমস্যা নয় (নির্বাহের আকারকে হ্রাস করুন), সুতরাং এটি উত্সটির 1-বাইট আকার যা গুরুত্বপূর্ণ।

2
একটি পুরানো তবে দুর্দান্ত সিস্টেমটির খুব চালাক অপব্যবহার।
মাস্ট

81

সি (x86_64, টিসিসি ), 7 বাইট

main=6;

এই উত্তর দ্বারা অনুপ্রাণিত ।

এটি অনলাইন চেষ্টা করুন!

কিভাবে এটা কাজ করে

উত্পন্ন সমাবেশটি এর মতো দেখায়।

    .globl  main
main:
    .long 6

নোট করুন যে টিসিসি ডেটা বিভাগে সংজ্ঞায়িত "ফাংশন" রাখে না ।

সংকলন করার পর, _start নির্দেশ করবে প্রধান যথারীতি। যখন ফলে প্রোগ্রাম মৃত্যুদন্ড কার্যকর করা হয়, এটা কোড আশা প্রধান এবং অল্প endian (!) 32 বিট পূর্ণসংখ্যা খুঁজে বের করে 6 , যা এনকোড করা আছে 0x06 0x00 0x00 0x00 । প্রথম বাইট - 0x06 - তাই প্রোগ্রামের সাথে বন্ধ, একটি অবৈধ opcode হয় SIGILL


সি (x86_64, জিসিসি ), 13 বাইট

const main=6;

এটি অনলাইন চেষ্টা করুন!

কিভাবে এটা কাজ করে

কনস্ট মডিফায়ার ব্যতীত উত্পন্ন সমাবেশটি এর মতো দেখায়।

    .globl  main
    .data
main:
    .long   6
    .section    .note.GNU-stack,"",@progbits

জিসিসির লিঙ্কার শেষ পংক্তিকে এমন একটি ইঙ্গিত হিসাবে বিবেচনা করে যা উত্পন্ন বস্তুকে এক্সিকিউটেবল স্ট্যাকের প্রয়োজন হয় না। যেহেতু প্রধান স্পষ্টভাবে একটি ডেটা বিভাগে স্থাপন করা হয়েছে , এতে থাকা ওপকোড কার্যকর করা যায় না, সুতরাং প্রোগ্রামটি সমাপ্ত হবে SIGSEGV (বিভাগকরণ ত্রুটি)।

দ্বিতীয় বা শেষ লাইনটি অপসারণের ফলে উত্পন্ন নির্বাহযোগ্য কাজকে উদ্দেশ্য হিসাবে তৈরি করা হবে। শেষ লাইনটি সংকলক পতাকা দিয়ে উপেক্ষা করা যেতে পারে -zexecstack( এটি অনলাইনে ব্যবহার করে দেখুন! ), তবে এটির জন্য 12 বাইট খরচ হয় ।

একটি সংক্ষিপ্ত বিকল্প হ'ল কন্সট মোডিফায়ারের সাহায্যে প্রধান ঘোষণা করা , যার ফলে নিম্নলিখিত সমাবেশ হয় assembly

        .globl  main
        .section    .rodata
main:
        .long   6
        .section    .note.GNU-stack,"",@progbits

এটি কোনও সংকলক পতাকা ছাড়াই কাজ করে। মনে রাখবেন যে, main=6;সংজ্ঞায়িত "ফাংশন" লিখতে হবে ডেটা কিন্তু const পরিবর্তক জিসিসি লিখে তোলে rodata পরিবর্তে, যা (অন্তত আমার প্ল্যাটফর্মে) কোড ধারণ করে অনুমোদিত হয়।


এমনকি কোনও ফাংশন ব্যবহারের সম্পূর্ণ পরিহারকে ভালোবাসুন :) যদিও সি পদে এটি কীভাবে কাজ করে? সংকলকটি কি এটি main6 টি দেখতে পায় এবং এটি কল করার চেষ্টা করে (যা আমি মনে করি এটি এটিকে ছেড়ে দিয়ে নির্দেশটি চেষ্টা করবে)?
মিয়া ইউ রুজ

11
@ জ্যাকডবসন এটির অপরিবর্তিত আচরণ, সুতরাং এটি সি এর পরিপ্রেক্ষিতে কাজ করে না; আপনি সংকলকের করুণায় রয়েছেন। ঝাঁকুনির এমনকি কিছু কারণে এটির জন্যও একটি সতর্কতা রয়েছে: "বহিরাগত সংযোগের সাথে 'মেইন' নামক ভেরিয়েবলের অপরিবর্তিত আচরণ রয়েছে"।
ববি স্যাকামানো

2
জিসিসি mainকোনও ফাংশন না হওয়ার বিষয়ে অভিযোগ করবে তবে কেবলমাত্র আপনি সতর্কতা চালু করলে (হয় -Wallবা -pedanticতা করবে)।
zwol

আমি মনে করি এটি ইউনিক্সের মতো সিস্টেমগুলির জন্য পাঠ্য / ডেটা / বিএস বিভাগ থাকতে এক্সিকিউটেবলের পক্ষে বেশ মানক । লিঙ্কারটি এক্সিকিউটেবলের পাঠ্য .rodata বিভাগের ভিতরে বিভাগটি রাখে এবং আমি প্রত্যাশা করি যে এটি কোনও প্ল্যাটফর্মের ক্ষেত্রে হবে। (কার্নেলের প্রোগ্রাম-লোডার কেবল বিভাগগুলি নিয়েই যত্নশীল)।
পিটার কর্ডেস

3
এছাড়াও খেয়াল করুন যে 06এটি x86-64-এ কেবল একটি অবৈধ নির্দেশ। 32-বিট মোডে, এটি PUSH ES, সুতরাং এই উত্তরটি কেবলমাত্র সেই সংকলকগুলির সাথেই কাজ করে যা ডিফল্ট -m64Ref.x86asm.net/coder.html#x06 দেখুন । শুধুমাত্র বাইট ক্রম যে ভবিষ্যতের সব এক্স 86 সিপিইউ উপর একটি অবৈধ নির্দেশ যেমন ডিকোড নিশ্চিত এর 2 বাইট UD2 : 0F 0B। অন্য যে কোনও কিছু ভবিষ্যতের উপসর্গ বা নির্দেশনা-এনকোডিং হতে পারে। তবুও, mainকিছু বাইটে লেবেল আটকে রাখতে সি-সংকলক পাওয়ার দুর্দান্ত উপায়ের জন্য আপভোটড !
পিটার কর্ডেস

39

সুইফট, 5 বাইট

[][0]

খালি অ্যারে 0 সূচক অ্যাক্সেস। এই কলগুলি fatalError(), যা একটি ত্রুটি বার্তা প্রিন্ট করে এবং একটি সিগিলের সাথে ক্র্যাশ হয়। আপনি এটি এখানে চেষ্টা করতে পারেন


এটি কৌশলযুক্তগুলির মধ্যে একটি;)
মেগা ম্যান

26
... পৃথিবীতে কেন এটি একটি সিগিলের সাথে ক্রাশ হয়? কে ভাবল যে এটি একটি উপযুক্ত সংকেত? রক্তাক্ত হিপস্টার: ডি
মুজার

4
@ আসু নো; fatalError()দৌড়ে ইচ্ছাকৃত ক্রাশ ud2। কেন তারা এমনটি করতে বেছে নিয়েছিল যা আমি জানি না, তবে তারা ভেবেছিল ত্রুটি বার্তাটি "অবৈধ নির্দেশ" অর্থবোধ করেছে কারণ প্রোগ্রামটি কিছু অবৈধ কাজ করেছে।
NobodyNada

2
উজ্জ্বল। আমি বাজি ধরব এটি ক্র্যাশ হওয়ার পক্ষে স্বল্পতম সুইফট কোডও।
জাল

3
@ জাল হ্যাঁ; আমি ছোট কিছু মনে করতে পারি না। আমি চেষ্টা করেছি nil!, তবে সংকলক ফলাফলের প্রকারটি অনুমান করতে পারেনি। (এছাড়াও, হাই Jal!)
NobodyNada

23

জিএনইউ সি, 25 বাইট

main(){__builtin_trap();}

জিএনইউ সি (এক্সটেনশন সহ সি এর একটি নির্দিষ্ট উপভাষা) এ প্রোগ্রামটি ইচ্ছাকৃতভাবে ক্র্যাশ করার জন্য একটি নির্দেশ রয়েছে। সঠিক বাস্তবায়ন সংস্করণ থেকে অন্য সংস্করণে পরিবর্তিত হয়, তবে প্রায়শই বিকাশকারীরা ক্র্যাশটিকে যথাসম্ভব সস্তাভাবে বাস্তবায়নের চেষ্টা করে যা সাধারণত একটি অবৈধ নির্দেশের ব্যবহারের সাথে জড়িত।

আমি পরীক্ষার জন্য নির্দিষ্ট সংস্করণটি ব্যবহার করি gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0; যাইহোক, এই প্রোগ্রামটি প্ল্যাটফমগুলির মোটামুটি প্রশস্ত পরিসরে একটি সিগিলের কারণ এবং এটি মোটামুটি বহনযোগ্য। অতিরিক্তভাবে, এটি আসলে একটি অবৈধ নির্দেশ কার্যকর করার মাধ্যমে এটি করে। উপরোক্তগুলি ডিফল্ট অপ্টিমাইজেশন সেটিংসের সাথে সংকলন করে এমন সমাবেশের কোডটি এখানে রয়েছে:

main:
    pushq %rbp
    movq %rsp, %rbp
    ud2

ud2 এমন একটি নির্দেশ যা इंटেলের গ্যারান্টি সর্বদা অপরিজ্ঞাত থাকবে।


11
−6:main(){asm("ud2");}
wchargin

এছাড়াও, আমি জানি না কীভাবে আমরা কাঁচা সমাবেশের জন্য বাইটগুলি গণনা করি তবে 00 00 0f 0bএটি মেশিনের ভাষা ud2...
wchargin

5
@wchargin: এটি একটি x86 + জিএনইউ সি উত্তর। এটি সমস্ত জিএনইউ সিস্টেমে পোর্টেবল। আরও লক্ষ করুন যে ইউডি 2 কেবলমাত্র 2 বাইট । আপনি যে 00বাইট পেয়েছেন সেখানে আইডিকে ; তারা ইউডি 2 এর জন্য মেশিন কোডের অংশ নয়। বিটিডাব্লু, যেমন আমি ডেনিসের উত্তরে মন্তব্য করেছি , x86-64 এ আপাতত এক বাইট অবৈধ নির্দেশনা রয়েছে, তবে সেভাবে থাকার গ্যারান্টি নেই।
পিটার কর্ডেস

@ ওচার্জিন: আমরা আশা করি মেশিন-কোড ফাংশন / প্রোগ্রামগুলির জন্য আমরা বাইটগুলি গণনা করি। আমার কিছু উত্তর দেখুন, যেমন x86-64 মেশিন কোডের 32 বাইটে অ্যাডলার 32 , বা x86-32 মেশিন কোডের 8 বাইটে জিসিডি
পিটার কর্ডেস

1
@ রুসলান: তারা নেই; 00 00x86-64 (হিসাবে add [rax], al) এ একই ডিকোড । 00 00 0f 0bসাধারণত লেখার আগে পয়েন্টার না থাকলে সিগিলের আগে সাইনসিজিভি সাধারণত হয় rax
পিটার কর্ডেস

22

সি (x86_64), 11, 30, 34, বা 34 + 15 = 49 বাইট

main[]="/";
c=6;main(){((void(*)())&c)();}
main(){int c=6;((void(*)())&c)();}

আমি বেশ কয়েকটি সমাধান জমা দিয়েছি যা SIGILLবিভিন্ন উপায়ে ফেলার জন্য লাইব্রেরি ফাংশন ব্যবহার করে , তবে যুক্তিযুক্তভাবে এটি প্রতারণা করছে, এতে লাইব্রেরি ফাংশনটি সমস্যার সমাধান করে। এখানে এমন অনেকগুলি সমাধান রয়েছে যা কোনও লাইব্রেরি ফাংশন ব্যবহার করে না এবং অপারেটিং সিস্টেমটি আপনাকে যেখানে নির্বাহযোগ্য কোড কার্যকর করতে দিতে রাজি তা নিয়ে বিভিন্ন ধরণের অনুমান করা যায়। (এখানে কনস্ট্যান্টগুলি x86_64 এর জন্য বেছে নেওয়া হয়েছে, তবে অবৈধ নির্দেশাবলী রয়েছে এমন বেশিরভাগ প্রসেসরের কাজের সমাধান পেতে আপনি এগুলি পরিবর্তন করতে পারেন))

06মেশিন কোডের সর্বনিম্ন সংখ্যাযুক্ত বাইট যা কোনও x86_64 প্রসেসরের কোনও সংজ্ঞায়িত নির্দেশের সাথে মেলে না। সুতরাং আমাদের যা করতে হবে তা হ'ল এটি কার্যকর করা। (বিকল্পভাবে, 2Fএটি অপরিজ্ঞাতও রয়েছে এবং এটি একটি একক মুদ্রণযোগ্য এএসসিআইআই চরিত্রের সাথেও মিলবে)) এর মধ্যে দুটিওই সর্বদা অপরিবর্তিত থাকার গ্যারান্টিযুক্ত নয়, তবে সেগুলি আজকের হিসাবে সংজ্ঞায়িত হয়নি।

এখানে প্রথম প্রোগ্রামটি কেবল 2Fপঠনযোগ্য ডেটা বিভাগ থেকে সম্পাদন করে । সর্বাধিক linkers থেকে একটি কাজ লাফ উত্পাদক করতে সক্ষম হয় না .textকরতে .rodata(বা তাদের অপারেটিং সিস্টেম এর সমতুল্য) এটা এমন কিছু বিষয় যা কখনও একটি সঠিকভাবে segmented প্রোগ্রামে দরকারী হবে না হিসেবে; আমি এমন কোনও অপারেটিং সিস্টেম খুঁজে পাইনি যার উপর এটি এখনও কাজ করে। আপনাকে এই সত্যটিও মঞ্জুর করতে হবে যে অনেক সংস্থাপকগণ প্রশ্নের মধ্যে থাকা স্ট্রিংকে একটি প্রশস্ত স্ট্রিং হিসাবে চান, যার জন্য অতিরিক্ত প্রয়োজনL; আমি ধরে নিচ্ছি যে এটি যে কোনও অপারেটিং সিস্টেমে কাজ করে সেগুলির বিষয়ে বেশ পুরানো দৃষ্টিভঙ্গি রয়েছে এবং এটি পূর্বনির্ধারিতভাবে সি -94 প্রাকের জন্য তৈরি করছে। এটি সম্ভব যে এই প্রোগ্রামটি কোথাও কাজ করে না, তবে এটিও সম্ভব যে এই প্রোগ্রামটি কোথাও কাজ করে এবং এইভাবে আমি আরও সন্দেহজনক-থেকে-কম-সন্দেহজনক সম্ভাব্য উত্তরের এই সংগ্রহে এটি তালিকাবদ্ধ করছি। (আমি এই উত্তরটি পোস্ট করার পরে, ডেনিস আড্ডায় সম্ভাবনার কথাও উল্লেখ করেছিলেন main[]={6}, যা একই দৈর্ঘ্য, এবং যা চরিত্রের প্রস্থের সমস্যাগুলির মধ্যে পড়ে না এবং এমনকি সম্ভাবনার দিকেও ইঙ্গিত দেয় main=6; আমি যুক্তিযুক্তভাবে এই উত্তরগুলি দাবি করতে পারি না) আমার, যেমন আমি সেগুলি নিজেই ভাবি নি))

এখানে দ্বিতীয় প্রোগ্রামটি 06পঠন-লিখনের ডেটা বিভাগ থেকে সম্পাদন করে । বেশিরভাগ অপারেটিং সিস্টেমে এটি বিভাগকরণের ত্রুটি ঘটায়, কারণ লিখনযোগ্য ডেটা বিভাগগুলিকে খারাপ ডিজাইনের ত্রুটি হিসাবে বিবেচনা করা হয় যা সম্ভবত শোষণকে সম্ভাব্য করে তোলে। যদিও এটি সর্বদা হয় নি, তাই এটি সম্ভবত লিনাক্সের যথেষ্ট পুরানো সংস্করণে কাজ করে তবে আমি এটি সহজে পরীক্ষা করতে পারি না।

তৃতীয় প্রোগ্রামটি 06স্ট্যাক থেকে কার্যকর করা হয়। আবার এটি আজকাল বিভাজন ত্রুটির কারণ হয়ে দাঁড়ায়, কারণ সুরক্ষার কারণে স্ট্যাকটি সাধারণত অলিখনযোগ্য হিসাবে শ্রেণিবদ্ধ করা হয়। আমি যে লিঙ্কার ডকুমেন্টেশনটি দেখেছি তার থেকে বোঝা যায় যে এটি স্ট্যাক থেকে মৃত্যুদন্ড কার্যকর করার জন্য আইনী হিসাবে ব্যবহৃত হত (পূর্ববর্তী দুটি মামলার বিপরীতে এটি কখনও কখনও উপকারী হয়), তবে আমি এটি পরীক্ষা করতে না পারলেও আমি নিশ্চিত যে এর কিছু আছে লিনাক্সের সংস্করণ (এবং সম্ভবত অন্যান্য অপারেটিং সিস্টেম) যার উপর এটি কাজ করে।

অবশেষে, আপনি যদি -Wl,-z,execstack(15 বাইট জরিমানা) দেন gcc( ldব্যাকএন্ডের অংশ হিসাবে GNU ব্যবহার করে ), এটি স্পষ্টভাবে এক্সিকিউটেবল স্ট্যাক সুরক্ষা বন্ধ করে দেবে, তৃতীয় প্রোগ্রামটি কাজ করার অনুমতি দেয় এবং প্রত্যাশার মতো একটি অবৈধ অপারেশন সংকেত দেয়। কাজ করার জন্য আমি এই 49-বাইট সংস্করণটি পরীক্ষা করেছি এবং যাচাই করেছি । (ডেনিস আড্ডায় উল্লেখ করেছেন যে এই বিকল্পটি স্পষ্টতই কাজ করে main=6যা 6 + 15 এর স্কোর দেবে pretty আমি স্পষ্টভাবে অবাক হয়েছি যে এই কাজটি করে, কারণ 6 স্পষ্টতই স্ট্যাকের উপরে নেই; লিঙ্ক বিকল্পটি দৃশ্যত এর চেয়ে আরও বেশি কিছু করে এর নাম থেকে বোঝা যাচ্ছে।)


X86-64 / লিনাক্সে gcc6 এর সাথে তার ডিফল্ট (লেনিয়েন্ট) মোডে, const main=6;বিভিন্ন রূপের মতো কাজ করে। এই linker (যা আমি সন্দেহ এছাড়াও আপনার linker হয়) হয় থেকে একটি লাফ উত্পাদন সক্ষম .textকরতে .rodata; আপনার যে সমস্যাটি ছিল তা হ'ল const, আপনি লিখনযোগ্য ডেটা বিভাগ ( .data) এ ঝাঁপিয়েছেন যা আধুনিক হার্ডওয়্যারে কার্যকর নয়। এটি পুরানো x86-তে কাজ করবে, যেখানে মেমরি সুরক্ষা হার্ডওয়্যার পৃষ্ঠাগুলি পঠনযোগ্য-তবে-না-সম্পাদনযোগ্য হিসাবে চিহ্নিত করতে পারে না।
zwol

নোট করুন যে এমনকি mainসি 98 এও একটি ফাংশন হওয়া দরকার (§5.1.2.2.1) - আমি জানি না কেন জিসিসি কেবলমাত্র একটি সতর্কতার দাবিদার mainহিসাবে ডেটা অবজেক্ট হিসাবে ঘোষণা করে এবং কেবল -pedanticকমান্ড লাইনেই কেন। নব্বইয়ের দশকের গোড়ার দিকে কেউ সম্ভবত ভেবেছিল যে দুর্ঘটনার কারণে কেউ তা করবে না, তবে এই ধরণের খেলা বাদ দিয়ে উদ্দেশ্য অনুযায়ী কাজ করা কোনও দরকারী বিষয় বলে মনে হয় না।
zwol

1
... আবার main[]="/"পড়ার পরে মনে হচ্ছে আপনি কেবল পঠনযোগ্য ডেটা বিভাগে ঝাঁপিয়ে পড়বেন বলে আশা করা হচ্ছে , কারণ স্ট্রিং লিটারালগুলি রডাটাতে যায়। আপনি char *foo = "..."এবং এর মধ্যে পার্থক্য ধরা পড়েছে char foo[] = "..."char *foo = "..."সিনট্যাকটিক চিনির জন্য const char __inaccessible1[] = "..."; char *foo = (char *)&__inaccessible1[0];, সুতরাং স্ট্রিং আক্ষরিক রডাটাতে যায় না এবং fooএটি পৃথক , লিখনযোগ্য গ্লোবাল ভেরিয়েবল যা এটির নির্দেশ করে। সঙ্গে char foo[] = "..."অবশ্য সম্পূর্ণ অ্যারে লিখনযোগ্য তথ্য সেগমেন্ট যায়।
zwol

19

GNU হিসাবে (x86_64), 3 বাইট

ud2

$ এক্সএক্সডি সিগিল.এস

00000000: 7564 32                                  ud2

- হিসাবে - s৪ সিগিল.এস -ও সিগিল.ও; ld -S sigill.o -o sigill

sigill.S: Assembler messages:
sigill.S: Warning: end of file not at end of a line; newline inserted
ld: warning: cannot find entry symbol _start; defaulting to 0000000000400078

$। / সিগিল

Illegal instruction

$জেজডাম্প-সিগিল

sigill:     file format elf64-x86-64

Disassembly of section .text:

0000000000400078 <__bss_start-0x200002>:>
  400078:       0f 0b                   ud2

দ্বি-বাইট "উত্স" এ প্রকাশ করার জন্য অবশ্যই একটি উপায় থাকতে হবে ...
অরেঞ্জডগ

ওহ, চালাক আমি ভাবছিলাম যে এটি তৈরির কোনও উপায় আছে যা ফাইলটির শুরুতে প্রবেশের পয়েন্টটি রাখবে (কোনও ঘোষণা ছাড়াই) এবং এতে কোনও অস্বাভাবিক বিল্ড সিস্টেম কনফিগারেশনের জন্য জরিমানা ব্যয় করা হবে না। আমি একটিও খুঁজে পেলাম না তবে মনে হচ্ছে আপনি করেছেন।

@ আইস ৫২৩: হ্যাঁ, আমারasm-link একক-ফাইল খেলনা প্রোগ্রামগুলির জন্য আমার স্বাভাবিক এনএএসএম / ওয়াইএসএম বিল্ড-স্ক্রিপ্ট ( ) এই উত্স থেকে একইভাবে একটি এক্সিকিউটেবল তৈরি করবে, যেহেতু ldপাঠ্য বিভাগের শুরু বা এ জাতীয় কিছুতে প্রবেশের পয়েন্টকে ডিফল্ট করে। আমি কেবল এইটির জন্য asm উত্স আকারের জন্য যাবার কথা ভাবিনি: পি
পিটার কর্ডেস

18

কিউইএমইউতে রাস্পবিয়ান, 4 (1?) বাইটে ব্যাশ করুন

আমার কাজ নয় আমি কেবল অন্য একজনের কাজকে রিপোর্ট করি। আমি দাবিটি পরীক্ষা করার মতো অবস্থানেও নেই। যেহেতু এই চ্যালেঞ্জের একটি গুরুত্বপূর্ণ অংশটি এমন একটি পরিবেশ খুঁজে পেয়েছে যেখানে এই সংকেতটি উত্থাপিত হবে এবং ধরা পড়বে, তাই আমি কিউইএমইউ, রাস্পবিয়ান বা ব্যাশের আকারটি অন্তর্ভুক্ত করছি না।

২ Feb ফেব্রুয়ারী, ২০১৩ রাত ৮: ৪৯- তে, ব্যবহারকারী এম্লহালাক রাস্পবেরি পাই ফোরায় " ক্রুট করার চেষ্টা করার সময় 'অবৈধ নির্দেশনা পাওয়ার " কথা জানিয়েছেন।

ping

আবহ

qemu: uncaught target signal 4 (Illegal instruction) - core dumped
Illegal instruction (core dumped)

আমি ধারণা করি যে আরও ছোট কমান্ডগুলি এই আউটপুটটি উত্পন্ন করবে, উদাহরণস্বরূপ tr,।

সম্পাদনা: @ ফ্লাফির মন্তব্যের ভিত্তিতে , ইনপুট দৈর্ঘ্যের উপর অনুমান করা নীচের বাউন্ডটিকে "1?" এ নামিয়েছে


5
আমি মনে করি [কমান্ডটি জিতবে। :)
ফ্লফি

17

x86 এমএস-ডস সিওএম ফাইল, 2 বাইট

সম্পাদনা: মন্তব্যে উল্লিখিত হিসাবে, ডস নিজে সিপিইউ ব্যতিক্রমকে ফাঁদে ফেলবে না এবং কেবল হ্যাং করবে (কেবল অ্যাপটি নয়, পুরো ওএস)। উইন্ডোজ এক্সপি-র মতো 32-বিট এনটি-ভিত্তিক ওএসে চালানো আসলে একটি অবৈধ নির্দেশ সংকেতকে ট্রিগার করবে।

0F 0B

ডকুমেন্টেশন থেকে :

একটি অবৈধ অপকোড উত্পন্ন করে। এই নির্দেশটি সফ্টওয়্যার পরীক্ষার জন্য স্পষ্টভাবে একটি অবৈধ অপকোড তৈরির জন্য সরবরাহ করা হয়।

যা বেশ স্ব-বর্ণনামূলক। একটি .com ফাইল হিসাবে সংরক্ষণ করুন এবং যে কোনও ডস এমুলেটরটিতে চালানো ডস এমুলেটর কেবল ক্রাশ হবে। উইন্ডোজ এক্সপি, ভিস্তা বা 7 32-বিট এ চালান।

উইন্ডোজ এক্সপি-এ সিগিল করুন


1
এটি প্রযুক্তিগতভাবে প্রসেসরের একটি অবৈধ নির্দেশ ব্যতিক্রম উত্পন্ন করার কারণ ঘটায়। যাইহোক, ডসের খুব সীমাবদ্ধ মেমরি সুরক্ষা এবং ব্যতিক্রম পরিচালনা করার ক্ষমতা রয়েছে এবং এটি কেবল অপরিজ্ঞাত আচরণ / ওএস ক্রাশের দিকে নিয়ে গেলে আমি অবাক হব না। ওপ বলেনি যে কার্নেলটি ত্রুটিটি ধরতে হয়েছে এবং কনসোলে "অবৈধ নির্দেশনা" মুদ্রণ করতে হয়েছিল।
মার্শেন্ট

4
আমি এই সমাধানটি ভেবেছিলাম, তবে আমি বিশ্বাস করি না এটি বৈধ। প্রশ্নটির জন্য একটি অবৈধ নির্দেশনা সংকেত প্রয়োজন , কেবল একটি অবৈধ নির্দেশিকা প্রসেসরের ফাঁদ নয় , সুতরাং উদ্দেশ্যটি ছিল একটি অপারেটিং সিস্টেমটি অনুসন্ধান করা যা প্রকৃতপক্ষে #UDফাঁদটির প্রতিক্রিয়াতে একটি সংকেত তৈরি করবে । (এছাড়াও, আমি প্রকৃতপক্ষে এটি পরীক্ষা করার সিদ্ধান্ত নিয়েছি এবং এটি আমার ডস এমুলেটরটিকে একটি অসীম লুপে ফেলে দিয়েছে appeared)

2
আমি এএমডি কে 6-II এ প্রকৃত এমএস-ডস-এ এটি পরীক্ষা করেছি। এটি চালানো ইএমএম 386 সহ এবং ছাড়া উভয়ই কেবল সিস্টেমটিকে স্তব্ধ করে দেয়। (EMM386 কিছু ত্রুটি যাত্রীর সঙ্গের নিজলটবহর এবং একটি বার্তা সিস্টেম স্থগিত, তাই এটি যদি এটি একটি পার্থক্য তৈরি দেখতে পরীক্ষা মূল্য ছিল।)
মার্ক

2
হ্যাঁ, ডস-ভিত্তিক উইন্ডোজগুলিতে সত্যই ফাঁদটি ধরতে সক্ষম হওয়া উচিত এবং কমপক্ষে অ্যাপটি ক্রাশ করা উচিত।
আসু

2
@ আসু আমি নিশ্চিত করতে পারি যে এটি এক্সপি 32-বিটে কাজ করে এবং সম্ভবত অন্যান্য 32-বিট উইন্ডোজ সিস্টেমে কাজ করবে। আমি সম্মত হই যে এটি ডস নিজেই কোনও সমাধান নয়, যেমন এটি ক্র্যাশ হয়ে গেছে।
মাস্টারওয়ান্ট

13

সি (32-বিট উইন্ডোজ), 34 বাইট

f(i){(&i)[-1]-=9;}main(){f(2831);}

এটি কেবলমাত্র অপটিমাইজেশন ছাড়াই সংকলন করে কাজ করে (অন্যথায়, fফাংশনের অবৈধ কোডটি "অনুকূলিতকরণ")।

mainফাংশনটির বিশৃঙ্খলা দেখে মনে হচ্ছে:

68 0f 0b 00 00    push 0b0f
e8 a1 d3 ff ff    call _f
...

আমরা দেখতে পাচ্ছি যে এটি pushআক্ষরিক মান 0b0f(ছোট-এন্ডিয়ান, তাই এর বাইটগুলি অদলবদল করা) সহ একটি নির্দেশিকা ব্যবহার করে । callনির্দেশ (একটি ফিরতি ঠিকানা পাহাড় জমে ..., ফাংশনের প্যারামিটার কাছাকাছি স্ট্যাক অবস্থিত যা নির্দেশ)। একটি [-1]স্থানচ্যুতি ব্যবহার করে , ফাংশনটি রিটার্নের ঠিকানাটিকে ওভাররাইড করে তাই এটি 9 বাইট আগে চিহ্নিত করে, যেখানে বাইট 0f 0bরয়েছে।

এই বাইটগুলি ডিজাইন হিসাবে "অপরিজ্ঞাত নির্দেশ" ব্যতিক্রম ঘটায়।


12

জাভা, 50 43 24 বাইট

a->a.exec("kill -4 $$");

এটি এমন java.util.function.Consumer<Runtime>1 টি যার কমান্ডটি ফ্লফির উত্তর থেকে চুরি হয়ে গেছে । এটি কাজ করে কারণ আপনাকে অবশ্যই এটি হিসাবে কল করতে হবেwhateverNameYouGiveIt.accept(Runtime.getRuntime()) !

দ্রষ্টব্য যে এটি একটি নতুন প্রক্রিয়া তৈরি করবে এবং এটিকে একটি সিগিল নিজেই ছুঁড়ে মারার পরিবর্তে একটি সিগিল নিক্ষেপ করবে।

1 - প্রযুক্তিগতভাবে, এটি একটি কারণও হতে পারে java.util.function.Function<Runtime, Process>কারণ শেল কমান্ড কার্যকর করে আপনি সবে তৈরি প্রক্রিয়াটি নিয়ন্ত্রণ করতে ব্যবহার করতে পারেন।Runtime#exec(String)java.lang.Process


এই জাতীয় ভার্চুজের ভাষায় আরও চিত্তাকর্ষক কিছু করার জন্য, এখানে একটি 60 72 60 48-বাইট বোনাস রয়েছে:

a->for(int b=0;;b++)a.exec("sudo kill -s 4 "+b);

এটি অন্যটি Consumer<Runtime>যা সমস্ত প্রক্রিয়াগুলি (নিজেই অন্তর্ভুক্ত) দিয়ে যায়, তাদের প্রত্যেককে একটি সিগিল ফেলে দেয়। হিংস্র ক্রাশের জন্য আরও ভাল ব্রেস।


আর একজন বোনাস (ক Consumer<ANYTHING_GOES>), যা অন্তত ভান 20 বাইট একটি SIGILL নিক্ষেপ:

a->System.exit(132);

8

পার্ল, 9 বাইট

kill+4,$$

কোনও প্রক্রিয়া সংকেতের জন্য কেবল উপযুক্ত লাইব্রেরি ফাংশনটি কল করে এবং প্রোগ্রামটি নিজেই সিগন্যাল করার জন্য পায় SIGILL। এখানে কোনও প্রকৃত অবৈধ নির্দেশনা জড়িত নয়, তবে এটি উপযুক্ত ফলাফল দেয়। (আমি মনে করি এটি চ্যালেঞ্জকে মোটামুটি সস্তা করে তোলে, তবে যদি কোনও কিছু অনুমোদিত হয় তবে আপনি যে লুপোলটি ব্যবহার করবেন তা এটিই ...)


এর পরিবর্তে একটি স্থান সহ একই পোস্ট করতে এখানে এসেছিল +। :)
সিমবাচ

2
লোকেরা যখন নন-গল্ফ প্রোগ্রামিংয়ের জন্য পার্ল শিখেন, তারা এটি দিয়ে এটি শিখেন +। কিছুক্ষণ গল্ফ করার পরে তারা +মাঝে মাঝে প্রদর্শন করার জন্য করে। অবশেষে, তারা পর্যাপ্ত প্রোগ্রাম লিখেছেন যেখানে তাদের কোনও কারণে বা অন্য কারণে হোয়াইটস্পেস এড়ানো প্রয়োজন ছিল যে এটি +অভ্যাস হয়ে যায়। (এটি কম অস্পষ্টভাবেও পার্স করে, কারণ এটি প্রথম বন্ধনীর জন্য পার্সারে বিশেষ

8

এআরএম ইউনিফাইড এসেমব্লার ল্যাঙ্গুয়েজ (ইউএল), 3 বাইট

nop

উদাহরণ স্বরূপ:

$ as ill.s -o ill.o
$ ld ill.o -o ill
ld: warning: cannot find entry symbol _start; defaulting to 00010054
$ ./ill 
Illegal instruction

সম্পাদন করার পরে nop, প্রসেসর .ARM.attributesবিভাগটিকে কোড হিসাবে ব্যাখ্যা করে এবং কোথাও একটি অবৈধ নির্দেশের মুখোমুখি হয়:

$ objdump -D ill

ill:     file format elf32-littlearm


Disassembly of section .text:

00010054 <__bss_end__-0x10004>:
   10054:       e1a00000        nop                     ; (mov r0, r0)

Disassembly of section .ARM.attributes:

00000000 <.ARM.attributes>:
   0:   00001341        andeq   r1, r0, r1, asr #6
   4:   61656100        cmnvs   r5, r0, lsl #2
   8:   01006962        tsteq   r0, r2, ror #18
   c:   00000009        andeq   r0, r0, r9
  10:   01080106        tsteq   r8, r6, lsl #2

একটি রাস্পবেরি পাই 3 পরীক্ষিত।


একরকম এটি পাই 2 তে কাজ করে না
মেগা ম্যান

7

মাইক্রোসফ্ট সি (ভিজ্যুয়াল স্টুডিও 2005 এর পরে), 16 বাইট

main(){__ud2();}

আমি এটি সহজেই পরীক্ষা করতে পারি না, তবে ডকুমেন্টেশন অনুসারে এটি ব্যবহারকারীর-মোড প্রোগ্রাম থেকে কার্নেল-কেবল নির্দেশ কার্যকর করার চেষ্টা করে অবৈধ নির্দেশনা তৈরি করা উচিত। (নোট করুন যেহেতু অবৈধ নির্দেশনা প্রোগ্রামটি ক্র্যাশ করেছে তাই আমাদের কাছ থেকে ফিরে আসার চেষ্টা করতে হবে না mainযার অর্থ এই কে & আর-স্টাইল mainফাংশনটি বৈধ। ভিজ্যুয়াল স্টুডিও কখনও সি -৮৮ থেকে সরানো সাধারণত একটি খারাপ জিনিস নয়, তবে এটি এসেছিল এখানে দরকারী।)


আপনি ভিএস2015 দিয়ে লিনাক্সের জন্য সংকলন করতে পারেন? কারণ আমি মনে করি না উইন্ডোজে সিগিলের সংজ্ঞা দেওয়া হয়েছে, তাই না?
অ্যান্ড্রু সাভিনিখ

7

রুবি, 13 বাইট

`kill -4 #$$`

আমার ধারণা এটি নিরাপদ যে ধরে নেওয়া যায় যে আমরা এটি * নিক্স শেল থেকে চালাচ্ছি। ব্যাকটিক আক্ষরিক প্রদত্ত শেল কমান্ডটি চালায়। $$চলমান রুবি প্রক্রিয়াটি #হল এবং স্ট্রিং সংযোগের জন্য tion


শেলটি সরাসরি কল না করে:

রুবি, 17 বাইট

Process.kill 4,$$

6

যে কোনও শেল (sh, bash, csh, ইত্যাদি), কোনও পসিক্স (10 বাইট)

তুচ্ছ উত্তর কিন্তু আমি কাউকে এটি পোস্ট করতে দেখিনি।

kill -4 $$

কেবলমাত্র বর্তমান প্রক্রিয়াতে সিগিল প্রেরণ করে। ওএসএক্সের উদাহরণ আউটপুট:

bash-3.2$ kill -4 $$
Illegal instruction: 4

আপনি কি করতে kill -4 1পারেন যদি প্রশ্নটি নির্দিষ্ট না করে কোন প্রোগ্রামটি সিগিল নিক্ষেপ করে
মার্ক কে কোয়ান

@ মারককোয়ান হিহ, ভাল বিষয়, যদিও এটি মূল অনুমান করে ...
এলোমেলো

2
You will have root in your programs- আপনার উত্তরটি বন্ধ করে দিন এবং একই সময়ে প্রশ্নটি সামান্য ট্রল করুন: ডি। বোনাস: আপনি হত্যা করতে পারেনinit
মার্ক কে কোয়ান

2
@ মারককোয়ান: লিনাক্স অন (আধুনিক সংস্করণ?) initআসলে এটি সংকেতগুলির থেকে অনাক্রম্য যে এটি নির্দিষ্টভাবে রুট এমনকি প্রাপ্তির জন্য অনুরোধ করে নি। যদিও আপনি সম্ভবত অন্য কোনও পসিক্স ওএস ব্যবহার করে এটি ঘিরে কাজ করতে পারেন।

2
kill -4 2তারপরে: ডি
মার্ক কে কোয়ান

6

ELF + x86 মেশিন কোড, 45 বাইট

এটি ইউনিক্স মেশিনের মধ্যে ক্ষুদ্রতম এক্সিকিউটেবল প্রোগ্রাম হওয়া উচিত যা সিগিল নিক্ষেপ করে (লিনাক্সের কারণে যদি আরও ছোট করা হয় তবে এক্সিকিউটেবলকে স্বীকৃতি না দেয়)।

nasm -f bin -o a.out tiny_sigill.asmএকটি x64 ভার্চুয়াল মেশিনের সাথে পরীক্ষিত, সংকলন করুন।

আসল 45 বাইট বাইনারি:

0000000 457f 464c 0001 0000 0000 0000 0000 0001

0000020 0002 0003 0020 0001 0020 0001 0004 0000

0000040 0b0f c031 cd40 0080 0034 0020 0001

সমাবেশ তালিকা (নীচের উত্স দেখুন):

;tiny_sigill.asm      
BITS 32


            org     0x00010000

            db      0x7F, "ELF"             ; e_ident
            dd      1                                       ; p_type
            dd      0                                       ; p_offset
            dd      $$                                      ; p_vaddr 
            dw      2                       ; e_type        ; p_paddr
            dw      3                       ; e_machine
            dd      _start                  ; e_version     ; p_filesz
            dd      _start                  ; e_entry       ; p_memsz
            dd      4                       ; e_phoff       ; p_flags


_start:
                ud2                             ; e_shoff       ; p_align
                xor     eax, eax
                inc     eax                     ; e_flags
                int     0x80
                db      0
                dw      0x34                    ; e_ehsize
                dw      0x20                    ; e_phentsize
                db      1                       ; e_phnum
                                                ; e_shentsize
                                                ; e_shnum
                                                ; e_shstrndx

  filesize      equ     $ - $$

দাবি অস্বীকার: একটি নম্বর ফেরত দেওয়ার জন্য ক্ষুদ্রতম সমাবেশের প্রোগ্রামটি লেখার জন্য নিম্নলিখিত টিউটোরিয়াল থেকে কোড, তবে মুভের পরিবর্তে অপকড ইউডি 2 ব্যবহার করুন : http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html


2
আমি সেই সঠিক টিউটোরিয়ালের একটি সম্পাদিত এক্সিকিউটেবল পোস্ট করছিলাম, তবে আপনি আমাকে এতে মারধর করেছেন। এটি জয়ের যোগ্য; এটি সিস্টেম রিসোর্স অর্থে সত্যিকারের সংক্ষিপ্ত বিবরণযুক্ত (এটি ইন-ফাইল এবং মেমরি উভয়ই 45 বাইটের বেশি প্রয়োজন হয় না, এবং উভয় ক্ষেত্রে ঠিক একই) এবং অন্যান্য এসেম্বলারের সমাধানগুলির মতো কোনও ফুলে যাওয়া দোভাষী নেই। এটি কেবল এটি যা হয়।
আইভিলনোটেক্সিস্ট আইডোনোটেক্সবাদ

5

অটোআইটি , 93 বাইট

ফ্ল্যাটাসেমব্লার ইনলাইন এসেম্বলি ব্যবহার করে:

#include<AssembleIt.au3>
Func W()
_("use32")
_("ud2")
_("ret")
EndFunc
_AssembleIt("int","W")

যখন সাইটিইটি ইন্টারেক্টিভ মোডে চালানো হবে, এটি অবিলম্বে ক্রাশ হবে। উইন্ডোজ ডিবাগারটি এক সেকেন্ডের ভগ্নাংশের জন্য পপআপ করা উচিত। কনসোল আউটপুটটি এরকম কিছু হবে:

--> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop
0x0F0BC3
!>14:27:09 AutoIt3.exe ended.rc:-1073741795

-1073741795WinAPI দ্বারা নিক্ষিপ্ত অপরিশোধিত ত্রুটি কোডটি কোথায় । এটি যে কোনও নেতিবাচক সংখ্যা হতে পারে।

একইভাবে আমার নিজের এসেম্বলার এলএএসএম ব্যবহার করে :

#include<LASM.au3>
$_=LASM_ASMToMemory("ud2"&@CRLF&"ret 16")
LASM_CallMemory($_,0,0,0,0)

5

এনএএসএম, 25 বাইট

এটি কীভাবে কাজ করে তা আমি জানি না, এটি কেবলমাত্র আমার কম্পিউটারে বিশেষভাবে (লিনাক্স x86_64) করে।

global start
start:
jmp 0

সংকলন এবং এর মতো চালান:

$ nasm -f elf64 ill.asm && ld ill.o && ./a.out
ld: warning: cannot find entry symbol _start; defaulting to 0000000000400080
Illegal instruction

আপনি সম্ভবত এটি চারটি বাইটে সংক্ষিপ্ত করতে পারেন, যেমনja 0
মার্ক কে কোয়ান

1
বা তিন হিসাবেud2
মার্ক কে কোয়ান

1
সম্ভবত এটি কিছু ডেটাতে লাফানোর চেষ্টা করছে বলে?
আসু

5

টিআই -৩৩ হেক্স বিধানসভা, ২ বাইট

PROGRAM:I
:AsmPrgmED77

হিসাবে চালান Asm(prgmI)। অবৈধ 0xed77 অপকোড কার্যকর করে। আমি প্রতিটি জোড়া হেক্স ডিজিটকে একটি বাইট হিসাবে গণনা করি।




1

লিনাক্স শেল, 9 বাইট

kill -4 0

SIGILLপিআইডি 0 দিয়ে প্রক্রিয়াতে প্রেরণ করে I পিআইডি 0 কীভাবে রয়েছে তা আমি জানি না তবে এটি সর্বদা বিদ্যমান।

এটি অনলাইন চেষ্টা করুন!


থেকে man kill:0 All processes in the current process group are signaled.
ডেনিস

1

জিএনইউ সি, 24 19 18 বাইট

-4 ডেনিসকে
ধন্যবাদ -1 সিলিংক্যাটকে ধন্যবাদ

main(){goto*&"'";}

এটি অনলাইন চেষ্টা করুন! এটি ASCII এবং x86_64 অনুমান করে। এটি মেশিন কোডটি চালানোর চেষ্টা করে 27, যা ... অবৈধ।


শর্টসি , 10 5 4 বাইট

AV"'

উপরের জিএনইউ সি কোডের সমতুল্য। এটি অনলাইন চেষ্টা করুন!


L"\6"x86_64 ধরে ধরেও এটি অবৈধ।
ডেনিস

@ ডেনিস 0x06 কি নির্দেশ? এছাড়াও, Lপ্রয়োজন হয় না।
এমডি এক্সএফ

এটি নিযুক্ত
ডেনিস

এটি নিযুক্ত করা হয়েছে; এটাই এটিকে অবৈধ করে তোলে। এছাড়াও, 'হয় 39 = 0x27 , না 0x39
ডেনিস

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.