সীমা ছাড়িয়ে কোনও অ্যারে অ্যাক্সেস করা কতটা বিপজ্জনক?


221

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

এখন আমি যা জানতে চাই তা সত্যিই কতটা বিপজ্জনক? যদি এটি আমার প্রোগ্রামটির ক্ষতি করে তবে এটি এতটা খারাপ নয়। অন্যদিকে যদি এটি আমার প্রোগ্রামের বাইরে কিছু ভেঙে যায়, কারণ আমি একরকম কিছু সম্পূর্ণ সম্পর্কযুক্ত মেমরি অ্যাক্সেস করতে সক্ষম হয়েছি তবে এটি খুব খারাপ, আমি কল্পনা করি। আমি প্রচুর 'কিছু ঘটতে পারে', 'বিভাজনটি সবচেয়ে কম খারাপ সমস্যা হতে পারে' পড়েছি , 'আপনার হার্ড ডিস্কটি গোলাপী হতে পারে এবং ইউনিকর্নগুলি আপনার উইন্ডোর নীচে গান করতে পারে', যা দুর্দান্ত, তবে আসলে কী বিপদ?

আমার প্রশ্নগুলো:

  1. অ্যারের বাইরের দিক থেকে মানগুলি পড়া কি আমার প্রোগ্রামের বাইরে কিছু ক্ষতি করতে পারে? আমি কল্পনা করব যে কেবল জিনিসগুলি দেখলে কিছুই বদলায় না, বা উদাহরণস্বরূপ আমি যে ফাইলটি পৌঁছলাম তার 'শেষবারের মতো খোলা' বৈশিষ্ট্যটি পরিবর্তন করবে?
  2. অ্যারে এর বাইরে মূল্য নির্ধারণ করা কি আমার প্রোগ্রামের বাইরে কিছু ক্ষতি করতে পারে? এই স্ট্যাক ওভারফ্লো প্রশ্ন থেকে আমি জড়ো করেছি যে কোনও মেমরির অবস্থান অ্যাক্সেস করা সম্ভব, কোনও সুরক্ষার গ্যারান্টি নেই।
  3. আমি এখন এক্সকোডের মধ্যে থেকে আমার ছোট প্রোগ্রামগুলি পরিচালনা করি। এটি কি আমার প্রোগ্রামের চারপাশে এমন কিছু অতিরিক্ত সুরক্ষা সরবরাহ করে যেখানে এটি নিজের স্মৃতির বাইরে পৌঁছতে পারে না? এটি এক্সকোডের ক্ষতি করতে পারে?
  4. কীভাবে আমার সহজাত বগি কোডটি নিরাপদে চালানো যায় সে সম্পর্কে কোনও প্রস্তাবনা?

আমি ওএসএক্স 10.7, এক্সকোড 4.6 ব্যবহার করি।


সাধারণভাবে, ওএস আপনার এবং অন্য প্রক্রিয়াগুলি আপনার ক্ষতিকারক হাত থেকে রক্ষা করবে। এটি এমন কিছু নয় যা আপনি অগত্যা প্রচুর উপর নির্ভর করতে চান।
হট লিকস

7
এছাড়াও, আপনার হার্ড ডিস্কে কোনও ফাইল কখনই "পৌঁছতে" ঘটবে না যখন অ্যাক্সেসের সীমা অতিক্রম করে এবং অ্যারে সূচিটি সীমা ছাড়িয়ে যায় (আপনার র্যামের মধ্যে)।
ড্রামারবি

1
আমি বিশ্বাস করি আপনি সি অ্যারে সম্পর্কে জিজ্ঞাসা করছেন, তাই না? সুতরাং ওটজিসির সাথে thats এর কোনও সম্পর্ক নেই এবং কোনও আইডইয়ের সাথে সত্যই সম্পর্কিত নয়।
ব্রায়ান চেন

17
এখানে আমার অদ্ভুত ফলাফলের প্রিয় উদাহরণ (এটি স্ট্যাকের সাথে সম্পর্কিত, তবে আমি এটি সত্যই আলোকিত করে দেখলাম ...)।
phipsgabler

উত্তর:


125

যতক্ষণ পর্যন্ত আইএসও সি স্ট্যান্ডার্ড (ভাষার আনুষ্ঠানিক সংজ্ঞা) সম্পর্কিত, এটির সীমার বাইরে কোনও অ্যারে অ্যাক্সেস করার ক্ষেত্রে " অপরিজ্ঞাত আচরণ " রয়েছে has এর আক্ষরিক অর্থ হ'ল:

আচরণ, একটি ননপোর্টেবল বা ভ্রান্ত প্রোগ্রাম নির্মাণ বা ভুল তথ্য ব্যবহারের উপর, যার জন্য এই আন্তর্জাতিক স্ট্যান্ডার্ড কোনও প্রয়োজনীয়তা আরোপ করে না

একটি নন-আদর্শিক নোটটি এতে প্রসারিত:

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

সুতরাং এটি তত্ত্ব। বাস্তবতা কি?

"শ্রেষ্ঠ" ক্ষেত্রে, আপনি মেমরি যা হয় আপনার বর্তমানে চলমান প্রোগ্রাম (আচরণ অস্বাভাবিক আপনার প্রোগ্রাম কারণ হতে পারে) মালিকানাধীন হচ্ছে কিছু টুকরা অ্যাক্সেস পাবেন, বা যে না (যা হবে সম্ভবত আপনার প্রোগ্রাম কারণ আপনার বর্তমানে চলমান প্রোগ্রাম দ্বারা মালিকানাধীন বিভাজন ত্রুটির মতো কিছু দিয়ে ক্র্যাশ) sh অথবা আপনি মেমোরিতে লেখার চেষ্টা করতে পারেন যা আপনার প্রোগ্রামটির মালিকানাধীন, তবে এটি কেবল পঠনযোগ্য হিসাবে চিহ্নিত হয়েছে; এটি সম্ভবত আপনার প্রোগ্রামটি ক্রাশের কারণ হতে পারে।

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

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

(একটি exampleতিহাসিক উদাহরণ: আমি শুনেছি যে কোর মেমোরি সহ কিছু পুরানো সিস্টেমে , বারবার টাইট লুপে একটি একক মেমরির অবস্থান অ্যাক্সেস করার ফলে আক্ষরিক অর্থে সেই স্মৃতির অংশটি গলে যেতে পারে Other / ড্রাইভ ক্যাবিনেটের সুরেলা ফ্রিকোয়েন্সি সহ একটি ডিস্ক ড্রাইভের হেড লিখুন, এটি কোনও টেবিলের উপর দিয়ে হাঁটা এবং মেঝেতে পড়ে যায় causing

এবং উদ্বিগ্ন হওয়ার জন্য স্কাইনেট সবসময় আছে ।

মূল কথাটি হ'ল: আপনি যদি ইচ্ছাকৃত খারাপ কিছু করতে কোনও প্রোগ্রাম লিখতে পারতেন তবে কমপক্ষে তাত্ত্বিকভাবে সম্ভব যে কোনও বগি প্রোগ্রাম দুর্ঘটনাক্রমে একই কাজ করতে পারে ।

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


1
ধন্যবাদ, আমি আসলে এটি পুরোপুরি বুঝতে পারি। তবে এটি তাত্ক্ষণিকভাবে একটি ফলোআপ প্রশ্নটিকে ট্রিগার করে: তার কম্পিউটারটিকে তার নিজের সম্ভাব্য ভয়ঙ্কর সৃষ্টি থেকে রক্ষা করতে কোনও প্রারম্ভিক প্রোগ্রামার কী করতে পারে? আমি কোনও প্রোগ্রামের পুরোপুরি পরীক্ষা করার পরে, আমি এটি বিশ্বে প্রকাশ করতে পারি। তবে প্রথম ট্রায়াল রানটি একটি ভুল প্রোগ্রাম হতে বাধ্য। আপনারা কীভাবে আপনার সিস্টেমগুলি নিজের থেকে সুরক্ষিত রাখবেন?
ক্রিসডি ২ '

6
@ ক্রিসিডি: আমরা ভাগ্যবান হতে চাই। 8-) ious গুরুতরভাবে, ওএস-স্তর সুরক্ষা আজকাল বেশ ভাল। সবচেয়ে খারাপ ঘটনা, আমি যদি দুর্ঘটনাযুক্ত কাঁটাচামচ বোমাটি লিখি তবে পুনরুদ্ধার করতে আমাকে পুনরায় বুট করতে হবে। তবে সিস্টেমটির প্রকৃত ক্ষতি সম্ভবত উদ্বিগ্ন হওয়ার মতো নয়, যতক্ষণ না আপনার প্রোগ্রামটি বিপজ্জনক হওয়ার প্রান্তে কিছু করার চেষ্টা করছেন না। আপনি যদি সত্যিই উদ্বিগ্ন থাকেন তবে ভার্চুয়াল মেশিনে প্রোগ্রামটি চালানো কোনও খারাপ ধারণা নয়।
কিথ থম্পসন 21

1
অন্যদিকে, আমি যে কম্পিউটারগুলি ব্যবহার করেছি (দুর্নীতিগ্রস্ত ফাইল, অপরিবর্তনযোগ্য সিস্টেমের ত্রুটি ইত্যাদি) নিয়ে প্রচুর অদ্ভুত ঘটনা ঘটেছিল তা দেখেছি এবং সেগুলি কতগুলি সি প্রোগ্রামের দ্বারা প্রদর্শিত হয়েছিল তা আমার জানা নেই them ভয়ঙ্কর অপরিবর্তিত আচরণ (এখনও অবধি আমার নাক থেকে কোন ভূতই বেরিয়ে আসে নি))
কিথ থম্পসন

1
আমাকে কাঁটাচামচ বোমা শেখানোর জন্য ধন্যবাদ - পুনরাবৃত্তিটি উপলব্ধি করার চেষ্টা করার সময় আমি খুব কাছেই জিনিসগুলি সম্পন্ন করেছি :)
ক্রিসডি ২

2
বৈজ্ঞানিকamerican.com/article/… সুতরাং আধুনিক ইলেকট্রনিক্স দিয়ে আগুন এখনও সম্ভব।
23

25

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

সরাসরি উত্তর:

1) পঠন অন্য কোনও প্রক্রিয়াকে সরাসরি কখনই ক্ষতিগ্রস্থ করতে পারে না, তবে কোনও প্রোগ্রাম / প্রক্রিয়া এনক্রিপ্ট, ডিক্রিপ্ট বা বৈধকরণের জন্য ব্যবহৃত KEY মান পড়তে গেলে তা পরোক্ষভাবে কোনও প্রক্রিয়া ক্ষতি করতে পারে। সীমা ছাড়িয়ে পড়া আপনার কোডটিতে কিছুটা বিরূপ / অপ্রত্যাশিত প্রভাব ফেলতে পারে যদি আপনি যে ডেটা পড়ছেন তার উপর ভিত্তি করে সিদ্ধান্ত নিচ্ছেন

২) মেমোরি ঠিকানার মাধ্যমে অ্যাক্সেসযোগ্য কোনও লোকে লিখে আপনার সত্যিকারের কোনও কিছুকে ক্ষতিগ্রস্থ করার একমাত্র উপায় হ'ল যদি আপনি যে মেমরি ঠিকানাটি লিখে যাচ্ছেন তা আসলে একটি হার্ডওয়্যার রেজিস্টার (এমন একটি অবস্থান যা আসলে ডেটা সঞ্চয় করার জন্য নয় তবে কিছু অংশ নিয়ন্ত্রণ করার জন্য) হার্ডওয়ারের) কোনও র‌্যামের অবস্থান নয়। প্রকৃতপক্ষে, আপনি এখনও কোনও কিছু ক্ষতি করতে চাইবেন না যদি আপনি পুনরায় লেখার যোগ্য নয় (বা nature প্রকৃতির কিছু) না এমন কিছু ওয়ান টাইম প্রোগ্রামযোগ্য লোকেশন না লিখেন।

3) সাধারণত ডিবাগারটির মধ্যে থেকে চলমান কোডটি ডিবাগ মোডে চালায়। ডিবাগ মোডে চলমান আপনি যখন অনুশীলনের বাইরে থেকে বা অবৈধভাবে অবৈধ বিবেচিত কিছু করেন তখন আপনার কোডটি দ্রুত (তবে সর্বদা নয়) বন্ধ করে দেয়।

৪) ম্যাক্রোগুলি কখনই ব্যবহার করবেন না, এমন ডেটা স্ট্রাকচার ব্যবহার করুন যা ইতিমধ্যে অন্তর্নির্মিত অ্যারে সূচি পরীক্ষা করে রাখা ইত্যাদি ইত্যাদি ....

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


4
নিরাপদ এবং সুরক্ষিত কোডিং অনুশীলনগুলি সর্বদা নিযুক্ত করা উচিত ।
নিক বোগালিস 21

3
আপনি খুব সুনির্দিষ্ট ব্যতিক্রম না ধরলে এবং সেগুলি থেকে কীভাবে পুনরুদ্ধার করবেন তা না জানলে আমি বগি কোডটির জন্য চেষ্টা / ধরার চেষ্টা না করার পরামর্শ দেব। ক্যাচ (...) হ'ল সবচেয়ে খারাপ জিনিস যা আপনি একটি বাগি কোডে যুক্ত করতে পারেন।
ইউজিন

1
@NikBougalis - আমি পুরোপুরি একমত, কিন্তু এটা আরও গুরুত্বপূর্ণ হলে ওএস স্বল্পতা, মেমরি সুরক্ষা / ভার্চুয়াল অ্যাড্রেস শূণ্যস্থান অন্তর্ভুক্ত বা OS এর :-) অভাব রয়েছে
trumpetlicks

@ ইউজিন - আমি কখনই লক্ষ্য করি নি যে আমার জন্য সমস্যা হতে পারে, তবে আমি আপনার সাথে একমত, আমি কি এটি সম্পাদনা করেছি :-)
ট্রাম্পলিকস ২

1) আপনি ক্ষয় বোঝাতে চাইছেন কারণ আমি এমন কিছু প্রকাশ করব যা গোপন রাখা উচিত ছিল? 2) আমি নিশ্চিত না যে আপনি যা বলতে চাইছেন তা আমি পেয়েছি তবে আমি অনুমান করি যে অ্যারে সীমানার বাইরে অবস্থানগুলি অ্যাক্সেস করার চেষ্টা করে আমি কেবল র‍্যাম অ্যাক্সেস করছি?
ক্রিসডি

9

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

যার অর্থ আপনার ব্যবহারকারী আপনাকে এমন একটি স্ট্রিং প্রেরণ করতে পারবেন যা আপনার প্রোগ্রামকে মূলত কল করার জন্য ডেকে exec("/bin/sh")আনবে, যা এটিকে শেল হিসাবে রূপান্তরিত করবে, আপনার সমস্ত ডেটা সংগ্রহ এবং আপনার মেশিনকে বোটনেটের নোডে রূপান্তরিত করে আপনার সিস্টেমে যা চায় তার জন্য তা কার্যকর করবে।

কীভাবে এটি করা যেতে পারে তার বিশদ জন্য মজাদার জন্য মজাদার ও মুনাফার জন্য স্ট্যাকের স্ম্যাশিং দেখুন ।


আমি জানি যে আমার সীমা ছাড়িয়ে অ্যারে উপাদানগুলি অ্যাক্সেস করা উচিত নয়, সেই বিন্দুটিকে শক্তিশালী করার জন্য ধন্যবাদ। তবে প্রশ্নটি হ'ল আমার প্রোগ্রামের সব ধরণের ক্ষতি করার পাশাপাশি আমি কি অজান্তেই আমার প্রোগ্রামটির স্মৃতি ছাড়িয়ে যেতে পারি? এবং আমি ওএসএক্স বলতে চাইছি।
ChrisD

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

আমি বরং বলব রিং 0 সুবিধাগুলির অধীনে, মূলগুলি নয়।
Ruslan

আরো আকর্ষণীয় যে অধি-আধুনিক কম্পাইলার সিদ্ধান্ত নিতে পারে যে যদি কোড চেষ্টা পড়া foo[0]মাধ্যমে foo[len-1]পূর্বে একটি চেক ব্যবহার করার পর আপনি lenপারেন চালানো বা কোড এক টুকরা এড়িয়ে যেতে অ্যারের দৈর্ঘ্য বিরুদ্ধে কম্পাইলার নিঃশর্তভাবে এমনকি যে অন্যান্য কোড রান করতে দ্বিধা করবেন না যদি অ্যাপ্লিকেশনটিতে অ্যারের পূর্ববর্তী স্টোরেজটির মালিকানা থাকে এবং এটি পড়ার প্রভাবগুলি সৌম্য হত তবে অন্য কোডটি আহ্বানের প্রভাবটি ঘটেনি।
সুপারক্যাট

8

তুমি লেখ:

আমি প্রচুর 'কিছু ঘটতে পারে', 'বিভাজনটি সবচেয়ে কম খারাপ সমস্যা হতে পারে', 'আপনার হার্ডডিস্কটি গোলাপী হয়ে উঠতে পারে এবং ইউনিকর্নগুলি আপনার উইন্ডোর নীচে গান করতে পারে' যা খুব সুন্দর, তবে আসলে কী বিপদ?

এটিকে এভাবে রাখা যাক: একটি বন্দুক লোড করুন। কোনও নির্দিষ্ট লক্ষ্য এবং আগুন ছাড়াই এটিকে জানালার বাইরে নির্দেশ করুন। বিপদ কী?

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

আপনার অপারেটিং সিস্টেম আপনাকে সুরক্ষা দেবে এই ধারণাটি আশাবাদী। সম্ভব হলে লেখার সীমা ছাড়িয়ে যাওয়ার চেষ্টা করুন।


ঠিক আছে, আমি যা ভীত ছিল ঠিক এটি ছিল। আমি 'সীমার বাইরে লেখা এড়াতে চেষ্টা করব' তবে, গত কয়েকমাস আমি যা করছি তা দেখে আমি অবশ্যই এটি এখনও অনেক কিছু করব। নিরাপদে অনুশীলন না করে আপনি কীভাবে প্রোগ্রামিংয়ে এত ভাল পেলেন?
ক্রিসডি ২ '

3
যিনি বলেছিলেন যে কোনও কিছুই নিরাপদ ছিল;)
ইউডো ক্লিন

7

আপনার প্রোগ্রামটিকে মূল হিসাবে চালিত করা বা অন্য কোনও সুবিধাযুক্ত ব্যবহারকারীর দ্বারা আপনার সিস্টেমের কোনও ক্ষতি হবে না, তাই সাধারণত এটি ভাল ধারণা হতে পারে।

কিছু এলোমেলো মেমরি অবস্থানে ডেটা লিখে আপনি নিজের কম্পিউটারে চলমান অন্য কোনও প্রোগ্রামকে সরাসরি "ক্ষতি" করতে পারবেন না কারণ প্রতিটি প্রক্রিয়া নিজস্ব মেমরির জায়গাতে চলেছে runs

আপনি যদি আপনার প্রক্রিয়াতে বরাদ্দ না করা কোনও মেমোরি অ্যাক্সেস করার চেষ্টা করেন তবে অপারেটিং সিস্টেমটি আপনার প্রোগ্রামটিকে বিভাগের ত্রুটিযুক্তভাবে সম্পাদন করা থেকে বিরত করবে।

সুতরাং সরাসরি (রুট হিসাবে চালানো এবং সরাসরি / ডেভ / মেমের মতো ফাইল অ্যাক্সেস না করে) আপনার প্রোগ্রামটি আপনার অপারেটিং সিস্টেমে চলমান অন্য কোনও প্রোগ্রামে হস্তক্ষেপ করবে এমন কোনও আশঙ্কা নেই।

তবুও - এবং সম্ভবত এটিই আপনি বিপদের দিক থেকে শুনেছেন - দুর্ঘটনাক্রমে অন্ধভাবে এলোমেলোভাবে মেমরি অবস্থানগুলিতে র্যান্ডম ডেটা লিখে আপনি নিশ্চিত যে কোনও ক্ষতি করতে সক্ষম তার ক্ষতি করতে পারবেন।

উদাহরণস্বরূপ আপনার প্রোগ্রামটি আপনার প্রোগ্রামের কোথাও সঞ্চিত ফাইলের নাম দ্বারা প্রদত্ত একটি নির্দিষ্ট ফাইল মুছতে চায়। যদি দুর্ঘটনাক্রমে আপনি কেবল সেই ফাইলটি ওভাররাইট করেন যেখানে ফাইলটির নাম সঞ্চিত থাকে তবে আপনি সম্ভবত এটির পরিবর্তে খুব আলাদা ফাইল মুছতে পারেন।


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

প্রকৃতপক্ষে আমি আমার প্রতিদিনের সমস্ত কম্পিউটিংয়ের জন্য যে অ্যাকাউন্টটি ব্যবহার করি তা কোনও প্রশাসক অ্যাকাউন্ট নয় (আমি ওএসএক্স পরিভাষাটি এটি আমার সিস্টেম হিসাবে ব্যবহার করি)। আপনি কি বলতে চান যে আমি কোনও মেমরির অবস্থান সেট করে চেষ্টা করে কিছু ক্ষতি করতে পারি না? এটি আসলে দুর্দান্ত খবর!
ক্রিসডি ২ '

দুর্ঘটনাক্রমে আপনি যে ক্ষতিকারক ক্ষতি করতে পারেন তার আগেই যেমনটি ইতিমধ্যে উল্লিখিত হয় আপনি ব্যবহারকারীর হিসাবে সবচেয়ে খারাপ ক্ষতি করতে পারেন। আপনি যদি 100% নিশ্চিত হতে চান তবে আপনার কোনও ডেটা ধ্বংস না করে সম্ভবত আপনি আপনার কম্পিউটারে আলাদা অ্যাকাউন্ট যুক্ত করতে এবং এটির সাথে পরীক্ষা করতে চাইবেন।
মিক্যরা

1
@ মিক্যারা: কেবলমাত্র যদি সিস্টেমের প্রতিরক্ষামূলক ব্যবস্থাগুলি 100% কার্যকর হয় তবে এটি সত্য। ম্যালওয়্যারটির অস্তিত্ব পরামর্শ দেয় যে আপনি সর্বদা এটির উপর নির্ভর করতে পারবেন না। (আমি এটির জন্য অবশ্যই উদ্বিগ্ন হওয়ার মতো পরামর্শ দিতে চাই না; এটি সম্ভব, তবে সম্ভাবনাও কম নয় যে কোনও প্রোগ্রাম দুর্ঘটনাক্রমে ম্যালওয়্যার দ্বারা ব্যবহৃত একই সুরক্ষা গর্তগুলিকে কাজে লাগাতে পারে ))
কীথ থম্পসন ২

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

4

NSArrayঅবজেক্টিভ-সি-তে মেমরির একটি নির্দিষ্ট ব্লক বরাদ্দ করা হয়েছে। অ্যারের সীমানা ছাড়িয়ে যাওয়ার অর্থ আপনি অ্যারে বরাদ্দ না করা মেমরি অ্যাক্সেস করা হবে। এর অর্থ:

  1. এই স্মৃতিটির কোনও মান থাকতে পারে। আপনার ডেটা টাইপের ভিত্তিতে ডেটা বৈধ কিনা তা জানার কোনও উপায় নেই।
  2. এই মেমোরিতে সংবেদনশীল তথ্য থাকতে পারে যেমন ব্যক্তিগত কী বা অন্যান্য ব্যবহারকারীর শংসাপত্রগুলি।
  3. মেমরি ঠিকানা অবৈধ বা সুরক্ষিত হতে পারে।
  4. মেমোরিতে পরিবর্তিত মান থাকতে পারে কারণ এটি অন্য প্রোগ্রাম বা থ্রেড দ্বারা অ্যাক্সেস করা হচ্ছে।
  5. অন্যান্য জিনিস মেমরি ঠিকানার স্থান যেমন মেমরি-ম্যাপযুক্ত পোর্টগুলি ব্যবহার করে।
  6. অজানা মেমরি ঠিকানায় ডেটা লেখা আপনার প্রোগ্রামটি ক্র্যাশ করতে পারে, ওএস মেমরির স্থানটিকে ওভাররাইট করতে পারে এবং সাধারণত সূর্যকে প্ররোচিত করতে পারে।

আপনার প্রোগ্রামের দিক থেকে আপনি সর্বদা জানতে চান কখন আপনার কোডটি একটি অ্যারের সীমা অতিক্রম করছে। এটি অজানা মানগুলি ফিরিয়ে আনতে পারে, যার ফলে আপনার অ্যাপ্লিকেশনটি ক্রাশ বা অবৈধ ডেটা সরবরাহ করবে।


NSArraysসীমার বাইরে ব্যতিক্রম আছে। এবং এই প্রশ্নগুলি সি অ্যারে সম্পর্কে বলে মনে হচ্ছে।
ড্রামারবি

আমি প্রকৃতপক্ষে সি অ্যারে বোঝাতে চাইছি। আমি জানি
এনএসআরাই

4

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

ম্যানুয়াল থেকে:

মেমচেক একটি মেমরি ত্রুটি সনাক্তকারী। এটি সি এবং সি ++ প্রোগ্রামগুলিতে সাধারণ যে নিম্নলিখিত সমস্যাগুলি সনাক্ত করতে পারে।

  • আপনার স্মৃতিতে অ্যাক্সেস করা উচিত নয়, উদাহরণস্বরূপ হিপ ব্লকগুলিকে ওভাররানিং এবং আন্ডারআরানিং করা, স্ট্যাকের শীর্ষে ওভাররানিং করা এবং মেমরিটি মুক্ত হওয়ার পরে অ্যাক্সেস করা।
  • অপরিবর্তিত মানগুলি ব্যবহার করে, অর্থাত্ মানগুলি যা আরম্ভ করা হয়নি, বা অন্যান্য অপরিবর্তিত মান থেকে প্রাপ্ত।
  • হিপ মেমরির ভুল ফাঁকা রাখা, যেমন ডাবল-ফ্রি হিপ ব্লকস, বা মেলোক / নতুন / নতুন [] বনাম ফ্রি / ডিলিট / ডিলিটের সাথে মেলে না এমন ব্যবহার]
  • মেমকি এবং সম্পর্কিত ফাংশনে ওভারল্যাপিং এসসিআর এবং ডিএসটি পয়েন্টার।
  • স্মৃতি ফাঁস।

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


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

3

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

উদাহরণস্বরূপ প্রোগ্রামিং ফ্ল্যাশ মেমরি। মেমরি চিপগুলিতে প্রোগ্রামিং মোডটি চিপের ঠিকানা সীমার অভ্যন্তরে নির্দিষ্ট স্থানে মানগুলির একটি নির্দিষ্ট ক্রম লিখে সক্ষম হয়। যদি অন্য প্রক্রিয়াটি চলমান অবস্থায় চিপের অন্য কোনও স্থানে লিখতে থাকে তবে এটি প্রোগ্রামিং চক্রটি ব্যর্থ হতে পারে।

কিছু ক্ষেত্রে হার্ডওয়্যার চারপাশে ঠিকানাগুলি মোড়ানো করবে (বেশিরভাগ উল্লেখযোগ্য বিট / বাইটস অ্যাড্রেস করা হবে না) তাই শারীরিক ঠিকানার জায়গার শেষের বাইরে কোনও ঠিকানায় লেখার ফলে ডানদিকে জিনিস ঠিক ঠিক মাঝখানে লেখা থাকে।

এবং অবশেষে, MC68000 এর মতো পুরানো সিপিইউগুলি এ পর্যন্ত লক করতে পারে যে কেবল একটি হার্ডওয়্যার রিসেট তাদের আবার যেতে পারে going কয়েক দশক ধরে তাদের নিয়ে কাজ করেনি তবে আমি বিশ্বাস করি এটি যখন কোনও ব্যতিক্রমকে সামলানোর চেষ্টা করার সময় কোনও বাস ত্রুটির (অস্তিত্বহীন মেমরির) সম্মুখীন হয়েছিল, তখন হার্ডওয়্যার রিসেটটি দৃserted় না হওয়া পর্যন্ত এটি কেবল থামবে lt

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

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

ডুনো আপনার সম্পর্কে, তবে ২ য় বা তৃতীয়বারের মতো আমি কোনও অ্যাপ্লিকেশন থেকে কর্ড্প বা হ্যাংআপ পেয়েছি, যাই হোক না কেন যে কোম্পানির উত্পাদিত তা সম্পর্কে আমার অভিমত অর্ধেকে নেমে যায়। ৪ র্থ বা ৫ ম বার এবং যা প্যাকেজই যাই হোক না কেন শেলওয়্যার হয়ে যায় এবং আমি প্যাকেজ / ডিস্কের মাঝখান দিয়ে কাঠের স্টাই চালিত করি তা নিশ্চিত করার জন্য এটি কখনই ফিরে আসে না।


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

2

আমি একটি ডিএসপি চিপের জন্য একটি সংকলক নিয়ে কাজ করছি যা ইচ্ছাকৃতভাবে কোড তৈরি করে যা সি কোডের বাইরে অ্যারের শেষের আগে একটিকে অ্যাক্সেস করে যা না!

এটি কারণ লুপগুলি এমনভাবে কাঠামোযুক্ত হয় যাতে কোনও পুনরাবৃত্তির শেষেটি পরবর্তী পুনরাবৃত্তির জন্য কিছু ডেটা প্রিফেট করে। সুতরাং শেষ পুনরাবৃত্তির শেষে প্রিফেট করা ডেটামটি বাস্তবে ব্যবহৃত হয় না।

এর মতো সি কোড রচনা অনির্ধারিত আচরণের জন্য আহ্বান জানায়, তবে এটি একটি মান নথির কেবল একটি আনুষ্ঠানিকতা যা নিজেকে সর্বোচ্চ বহনযোগ্যতার সাথে উদ্বেগ দেয়।

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

এটি এর মতো বাগ ধরার মতো এবং তাই আচরণটি কেবলমাত্র সেই কারণেই এককভাবে সংজ্ঞায়িত করা মূল্যবান: যাতে রান-টাইম "মেইন -২২ লাইনে line২ লাইনে অ্যারে ওভাররান" এর মতো ডায়াগনস্টিক বার্তা তৈরি করতে পারে।

ভার্চুয়াল মেমরিযুক্ত সিস্টেমে একটি অ্যারে এমনভাবে বরাদ্দ হতে পারে যাতে নীচের ঠিকানাটি ভার্চুয়াল মেমরির একটি আনম্যাপড অঞ্চলে থাকে। অ্যাক্সেস এর পরে প্রোগ্রামটি বোমাবে।

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

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

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

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


অতিরিক্তভাবে, প্রদত্ত যে কোনও কমপক্ষে একটি প্রোগ্রাম রয়েছে যা একটি নির্দিষ্ট বাস্তবায়ন সঠিকভাবে প্রক্রিয়া করে যদিও এটি আদর্শভাবে প্রদত্ত সমস্ত বাস্তবায়ন সীমাবদ্ধভাবে ট্যাক্স করে, যে বাধা লঙ্ঘনমুক্ত এবং অন্য কোনও প্রোগ্রামকে খাওয়ানো হলে বাস্তবায়ন স্বেচ্ছায় আচরণ করতে পারে be অনুযোগ". ফলস্বরূপ, সি প্রোগ্রামের 99.999% (প্ল্যাটফর্মের "একটি প্রোগ্রাম" ব্যতীত অন্য কিছু) এমন আচরণের উপর নির্ভর করে যেখানে স্ট্যান্ডার্ডের কোনও প্রয়োজনীয়তা থাকে না।
সুপারক্যাট

1

আপনার নিজের প্রোগ্রাম ছাড়াও, আমি মনে করি না যে আপনি কোনও কিছু ভেঙে ফেলবেন, সবচেয়ে খারাপ ক্ষেত্রে আপনি কোনও মেমরি অ্যাড্রেস পড়তে বা লিখতে চেষ্টা করবেন যা কোনও পৃষ্ঠার সাথে সম্পর্কিত যা কার্নেল আপনার প্রসেসের জন্য বরাদ্দ করেনি, যথাযথ ব্যতিক্রম সৃষ্টি করে এবং হত্যা করা হচ্ছে (মানে আপনার প্রক্রিয়া)।


3
..কি? আপনার নিজের প্রক্রিয়াতে মেমরির ওভাররাইটিং সম্পর্কে কীভাবে পরে কিছু পরিবর্তনশীল ব্যবহার করা যায় ... যা রহস্যজনকভাবে এর মান পরিবর্তন করেছে! আমি আপনাকে আশ্বাস দিয়েছি যে এই বাগগুলি মজাদার প্রচুর পরিমাণে ট্র্যাক করার জন্য। একটি Segfault সেরা ফলাফল হবে। -1
এড এস

2
আমি তার নিজের প্রোগ্রাম ছাড়াও অন্যান্য প্রক্রিয়াগুলি "
ভাঙ

আমি আমার নিজের প্রোগ্রামটি ভেঙে ফেললে আমি সত্যিই চিন্তা করি না। আমি কেবল শিখছি, আমি যদি আমার অ্যারের বাইরে থাকা কিছু অ্যাক্সেস করি তবে প্রোগ্রামটি অবশ্যই স্পষ্টতই ভুল। আমি আমার ক্রিয়েশনগুলি ডিবাগ করার সময় অন্য কিছু ভাঙার ঝুঁকিতে আরও বেশি করে চিন্তিত হয়ে
উঠছি

বিষয়টি হ'ল: আমি যদি নির্ধারিত মেমরিটি অ্যাক্সেস করার চেষ্টা করি না, তবে আমার প্রক্রিয়াটি মেরে ফেলা হবে কি আমি নিশ্চিত হতে পারি? (
ওএসএক্সে থাকা

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