من یک باینری SUID دارم که اکنون می توانم از یک سرریز بافر استفاده کنم تا یک جعبه EUID بالا بگیرم.
با این وجود من با استفاده از shellcode زیاد کار نمیکنم و فایل لازم برای دسترسی به آن نیاز به من یک GID برابر EUID دریافت کردم. با این حال، پس از به دست آوردن پوسته من، GID من مانند قبل باقی می ماند.
پرسش من: آیا باید سیستم را فراخوانی کنم یا باید شید کد را اجرا کنم تا GID من را ارتقا دهد تا زمانی که پوسته بوجود می آید برابر EUID من باشد؟
همچنین: تا کنون، قبل از تخمک گذاری پوسته، سعی کرده ام سیستم های setregid و setegid را در shellcode آزمایش کنم، با این وجود هر دو با استفاده از GID که قبلا GID غیر مجاز من نیستند -1 بازگشت می کنند.
نه چندان دور من در کنار خط مشی کولاتز، مشکل ریاضی بسیار جالب که هر کسی هنوز برای پیدا کردن اثبات برای آن آمده است. محتوا Collatz، در غیر این صورت به عنوان مشکل 3n + 1، به نظر می رسد بسیار ساده است که هر کسی می تواند وسوسه شود برای رسیدن به آن برای رسیدن به اثبات.
من شنیده ام که این حدس در برخی از نقطه توقف پیشرفت در ریاضیات بود هر ریاضیدان روی آن کار می کرد، تلاش می کرد تا این اثبات را پیدا کند.
بنابراین گمانه کولتز چیست؟
گزاره کولاتز یک فرض در ریاضیات به نام لوتار کولاتز است و خلاصه آن: اگر شما هر عدد طبیعی را می گیرید [19659005] n اگر آن را حتی تقسیم آن توسط 2 (برای دریافت n / 2 ) اگر آن را عدد صحیح آن را ضرب 3 و اضافه کردن 1 (برای دریافت 3n + 1 ) و اگر این پروسه را به صورت بازگشتی و نامحدود تکرار کنید، در نهایت به مرحله اول می رسیم.
به عنوان مثال اجازه می دهیم شماره 20 ، این ترتیب است که شما دریافت خواهید کرد:
همانطور که می بینید ما ev به طور انحصاری 1 رسیده است.
این مقاله در مورد فرمول بندی های مختلف از یک حدس است: معکوس
رابطه معکوس
فرمول اصلی بیان می کند که تمام اعداد طبیعی در نهایت منجر به یک با استفاده از رابطه معکوس می توانیم خودمان را به اثبات برساند که به طور خلاف آن است که 1 به تمام اعداد طبیعی منتهی می شود.
رابطه معکوس Conjecture Collatz
رابطه معکوس تا حدودی پیچیده و پیچیده تر از اصل 3n + 1 است طول می کشد تا سر خود را به اطراف بچرخانید. این بر اساس محاسبات مدولار، نماد هماهنگی توجه است (≡):
برای هر عدد صحیح n، ≡ 1 (mod 2) iff 3n + 1 ≡ 4 (mod 6). معادل (n-1) / 3 ≡ 1 (mod 2) iff n ≡ 4 (mod 6)
برای حدس معکوس، ما باید از پایین، از 1. در این فرمول من علاقه مند ( n – 1) / 3 ≡ 1 (mod 2) iff n ≡ 4 (mod 6) part
پس چه چیزی به ما می دهد؟ با استفاده از این بخش می توانیم عددهای عددی را از شماره داده شده شناسایی کنیم، چرا که مفید است، زیرا فقط گاهی اوقات عددی عدد بالاتر از تعداد داده شده وجود خواهد داشت و در هر زمان حتی عدد (see Pic. above، 2n always present) 19659022] اگر n ≡ 4 (mod 6) سپس (n-1) / 3 ≡ 1 (mod 2)
در سایر کلمات جاوا اسکریپت:
اگر (n-4)٪ 6 = 0، (n – 1) / 3 و این شماره ((n – 1) / 3)٪ 2 = 1 (odd)
اجازه می دهد تا آن را بررسی کنید، از 1:
(1-4 )٪ 6! = 0 بدین معناست که تعداد عددی بالاتر از 1 در توالی Collatz وجود ندارد، اما ما می دانیم که وجود خواهد داشت حتی (* 2) عدد، بنابراین عدد بالاتر از یک خواهد شد 2.
ادامه می دهد با 2 :
(2-4)٪ 6! = 0، به این معنی است که هیچ عدد عدد بیش از 2 وجود ندارد، فقط حقیقت: 2 * 2 = 4
ادامه 4:
(4-4 )٪ 6 = 0، به این معنی که یک عدد عدد بیش از 4 وجود دارد و این عدد (4-1) / 3 است که یکی است. ما برگشتیم به جایی که ما شروع کردیم، و این حلقه است، فرضیه کالارتز «ناهنجاری»، آن چرخه 1 → 4 → 2 → 1 . ما در حال حاضر به آن اهمیتی نمی دهیم، بنابراین ما باید یک شرایط دیگر برای عدد های عجیب ما اضافه کنیم:
ما فقط می توانیم از یک عدد عدد استفاده کنیم اگر آن برابر با 1 نیست: (n-1) / 3! = 1 [19659032] در حال حاضر ما می توانیم فقط تعداد عجیب و غریبی را نادیده بگیریم و ادامه دهیم حتی: 8
(8-4)٪ 6! = 0، ما فقط بالاتر از 8 است که 16 است.
تا کنون این Collatz پایین ترین توالی: 1-2-4-8-16
بیایید ببینیم که چه اتفاقی خواهد افتاد:
(16-4)٪ 6 = 0 تعداد عدد بیش از 16 وجود دارد و آن (16-1) / 3 = 5، همانگونه که می دانیم همیشه هم یک عدد حقیقی وجود دارد
در حال حاضر می دانیم که 2 عدد بالاتر از 16: 5 و 32 وجود دارد، در اینجا می توانیم یک شکل درخت را ببینیم:
درخت معکوس Collatz
و هنگامی که ما همان فرآیند را برای 32 و 5 تکرار خواهیم دید که چگونه این درخت رشد خواهد کرد.
اکنون، هنگامی که ما کمی با آرایتفتاسیون پس از فرمول معکوس کلامز کولتز روشن می شویم، ما در نهایت می تواند چیزی را به برنامه نویسی تبدیل کند. همانطور که قبلا می دانید زبان مورد نظر برای اجرای زمین بازی جاوا اسکریپت است، با توجه به این که تنها از ویژگی های زبان بومی استفاده خواهم کرد بدون هیچ گونه عوارضی.
سطوح ساده لینک کمتر
اولین کاری ساده که می توانیم انجام دهیم این است یک آرایه آرایه را پر کنید، هر آرایه زیر به اعداد در یک سطح درختی مربوط می شود:
درخت دودویی
همانطور که شما ممکن است متوجه شوید، نتایج محاسبه یک درخت دودویی نامتعادل یا حتی جستجو باینری را ایجاد می کند درخت، با جایگزینی بزرگتر از و کمتر از ، شرایط با ساده odd a حتی . من در اینجا ساختار دادههای درختی باینری سفارشی را ایجاد نخواهم کرد، اما این مقاله شایسته مقاله جداگانه ای است، اما ما می دانیم که می توانیم درخت دودویی را به صورت ساختار داده های ضمنی با استفاده از آرایه های بومی نماییم:
در این ترتیب جمع و جور، اگر یک گره یک شاخص i، فرزندان آن در شاخص 2i + 1 (برای فرزند چپ) و 2i + 2 (برای سمت راست) یافت می شود، در حالی که پدر و مادرش (در صورت وجود) در شاخص (i-1) / 2 (فرض می شود ریشه شاخص صفر است.
همانطور که می بینید این یک ایده واقعا بد بود و کاملا یک راه حل فضایی برای توالی کولاتز نبود. من فکر می کنم ممکن است راه هایی برای بهینه سازی وجود داشته باشد، اما قطعا در خارج از محدوده این مقاله است.
نتیجه گیری
بخش پیچیده ای در Conjecture معکوس کولاتز، ریاضیات در پشت آن است، پس می توانید خود را انجام دهید پیاده سازی، ذخیره سازی و راه حل های محاسباتی، همانطور که در مثال 2 بالا ذکر شد. همه چیز بستگی به روش کار شما دارد و برای اطلاعات، تجزیه و تحلیل، تجسم یا چیز دیگری نیاز دارید.
و فقط به عنوان یک سلب مسئولیت، اما اگر شما در حال خواندن این مقاله شما احتمالا قبلا می دانید، که یک رشته JavaScript جاوا اسکریپت CPU مناسب برای محاسبه و تجزیه و تحلیل واقعی سنگین نیست. دلیل اینکه من با آن بازی کردم تجسم آینده از نتایج، برای رسم نمودارها و درختان بسیار است، در اینجا ما فقط از آرایتکتیوهای اولیه استفاده می کنیم.
مجموعه های مختلف ROM شما، بازی های Steam و سایر بازی های ویندوز دیگر، در پایان روز، فقط بازی ها هستند. آیا این منطقی است که همه آنها را از همان جا راه اندازی کنیم؟
این ایده Launchbox است که یک برنامه رایگان است که می تواند ROM ها را با هر شبیه ساز، بازی های DOS با استفاده از DOSBox و حتی مجموعه بازی های کامپیوتری خود راه اندازی کند. اگر شما فردی هستید که بازی را نگه می دارد و سپس بازی می کند، این برای شماست. شما با یک رابط کاربری کامل، با پوشش هنر و جزئیات، به فهرست هر زمان که شما می خواهید بازی چیزی است.
ما نشان داده ایم که چگونه برای راه اندازی RetroArch، و این به شما یک رابط واحد برای تقلید همه چیز شما می توانید تصور کنید، اما هنوز یک سیستم است که از بقیه مجموعه بازی شما جدا است. Launchbox ROM ها را در کنار سایر بازی های موجود بر روی سیستم شما قرار می دهد. در اینجا چگونگی تنظیم آن
راه اندازی Launchbox
نصب Launchbox ساده است: فقط به وب سایت Launchbox بروید و دستورالعمل ها را دنبال کنید. توجه داشته باشید که شما نیاز به یک آدرس ایمیل برای دریافت لینک دانلود کنید و سپس کارهایی مانند هر برنامه دیگر ویندوز را نصب کنید.
اولین بار که شما برنامه را اجرا میکنید، یک جادوگر به شما کمک میکند نصب عناوین.
باز هم، در حال حاضر، واردات بازی های Steam کار نمی کند، حتی اگر آن را در میان گزینه ها ذکر شده است.
اضافه کردن بازی های Steam به Launchbox
برای اضافه کردن بخار خود را بازی ها به Launchbox، شما قبل از اینکه وارد بازی ها شوید، به یک قسمت از اطلاعات نیاز دارید. اولین چیزی که به آن نیاز دارید کلید Key Steam است. دلیل این امر این است که Steam چیزهایی را که اخیرا کار می کند تغییر داد و کلید API که متعلق به سازندگان Launchbox است، دیگر برای کاربران Launchbox کار نمی کند.
خبر خوب این است که گرفتن کلید API خودتان بسیار ساده است. برای ثبت نام یک کلید API وب، به صفحه Steam بروید (اگر قبلا وارد سیستم شوید). این سایت از شما می خواهد آدرس وب سایت خود را وارد کنید. اگر شما یک وب سایت دارید، می توانید آن را وارد کنید، اما شما همچنین می توانید هر وب سایت تصادفی را تایپ کنید تا کلید API خود را دریافت کنید. کپی آن کلید API، زیرا شما آن را در یک لحظه نیاز دارید.
چیز بعدی که شما نیاز دارید، شناسه Steam شما است. ساده ترین راه برای پیدا کردن این است که وارد Steam (وب سایت یا مشتری Steam) شوید و به صفحه نمایه خود بروید. نگاهی به URL در بالای صفحه و آخرین بخشی از آن، شناسه Steam شما است.
با استفاده از این اطلاعات در دست، شما آماده واردات بازی Steam خود هستید به Launchbox . در Launchbox، به Tools> Import> Steam Games بروید.
اولین چیزی که از شما خواسته شده است، قسمت ID کاربر نمایه Steam شما را پر کنید. بعد از آن کلید Enter را بزنید و بعد دکمه Next را بزنید.
بعد از آن شما برای آن کلید API درخواست می شود، بنابراین پیش بروید و آن را در جعبه قرار دهید، سپس روی «بعدی» کلیک کنید. دکمه
سپس شما باید مشخص کنید که کدام یک از فراداده ها را برای بازی هایتان دانلود کنید. این شامل مواردی مانند عنوان، رتبه بندی ESRB و غیره می باشد. اگر مطمئن نیستید، به طور پیش فرض آن را تنظیم کنید. در غیر این صورت، انتخاب خود را انتخاب کنید و سپس دوباره "بعدی" را فشار دهید.
بعد از شما خواسته می شود که آیا شما می خواهید تصاویر را برای بازی های خود دانلود کنید. اینجا بسیار زیاد است و همه دیدگاه ها و تم های مختلفی را که می توانید برای مرور بازی های خود استفاده کنید را پوشش می دهد. شما می خواهید بیشتر آن را جذب کنید، اما اگر شما به پایین حرکت کنید، می توانید گزینه های ویدئویی تریلر و ویدئو را انتخاب کنید اگر می خواهید دانلود سریعتر انجام شود. پس از انتخابات خود، دکمه Next را کلیک کنید.
Launchbox پس از آن کتابخانه Steam شما را اسکن کرده و بازی های شما را نشان می دهد. این لیست شامل تمام بازی های Steam شما می شود، چه در حال حاضر آنها نصب شده اند یا خیر. اگر شما هر بازی را نمی خواهید اضافه کنید به Launchbox، آنها را انتخاب کنید و روی کلید حذف کلیک کنید تا آنها را از لیست حذف کنید. هنگامی که شما آماده هستید، برای شروع وارد کردن بازی خود، روی «پایان» کلیک کنید.
وارد کردن بازی شما ممکن است کمی وقت بگذارد. چقدر به تعداد بازی ها بستگی دارد، و چقدر هنر (و ویدیو) برای هر یک از شما وارد می کنید. بنابراین فقط اجازه دهید آن را برای مدتی اجرا کنید. هنگامی که شما انجام می شود، بازی Steam خود را به مخلوط اضافه می کنید.
اضافه کردن بازی های ویندوز به Launchbox
اگر تعدادی از بازی های ویندوز را نصب کرده اید، Launchbox می تواند کامپیوتر شما را اسکن کند و آنها را به صورت خودکار اضافه کند . برای شروع، دکمه ویندوز را در جادوگر راه اندازی انتخاب کنید. اگر شما جادوگر را پر کردید، به Tools> Import> Games ویندوز در برنامه اصلی بروید.
این ابزار رایانه شما را اسکن میکند و به همان اندازه که بسیاری از بازیها را پیدا میکند، از جمله هر نصب شده با استفاده از Origin یا GOG.
این آسان بود، آیا این نبود؟ کلیک کنید "پایان" و Launchbox دانلود هنر برای این بازی ها و همه چیز واردات.
اضافه کردن رام به Launchbox
سحر و جادو واقعی در اینجا اضافه کردن مجموعه ROM خود را. برای شروع کلیک کنید "وارد کردن فایل های ROM" در جادوگر یا سر به Tools> Import> ROM Files در برنامه اصلی. برای شروع لانچ بکس را به سمت پوشه هایی با ROM در آنها اشاره می کنیم.
سپس به Launchbox بگویید که سیستم ROM ها هستند.
در نهایت، Launchbox را به سمت یک شبیه ساز که شما می خواهم برای استفاده از این بازی استفاده کنید. توصیه میکنیم Retroarch را راه اندازی کنید، زیرا به این ترتیب شما فقط نیاز دارید همه چیز را یکبار تنظیم کنید، اما با Launchbox میتوانید از هر شبیه ساز هم برای هر پلتفرم استفاده کنید. این کاملا به شماست.
وقتی کارتان را انجام می دهید، Launchbox پوشه ها را اسکن می کند و همه ROM های موجود را پیدا می کند. سپس پوستر و توضیحات را دانلود کنید. شما می توانید از طریق یک روش مشابه برای بازی های DOS بروید، اما شما می خواهید در تنظیم DOSBox برای بازی کردن بازی های قدیمی قبل از غواصی به آن بروید.
اضافه کردن بازی های فردی
اگر ROM یا بازی در مجموعه شما انجام نمی شود نه، نگران نباش شما می توانید عناوین را به صورت جداگانه اضافه کنید. فقط بر روی دکمه "اضافه کردن" در پایین سمت راست کلیک کنید و یک پنجره بالا میآید.
در اینجا میتوانید اطلاعات خود را برای هر بازی تایپ کنید، از جمله نام و محل اجرای فایل یا ROM موجود است. این می تواند آزار دهنده باشد، اما اگر جادوگران مختلف یک عنوان را از دست دادند، این تنها گزینه ی شماست. اکثر بازی ها، حتی ROM ها، در آزمون های ما پیدا شد، اما هنوز هم خوب است که گزینه داشته باشیم.
مرور مجموعه شما
بنابراین چه چیزی در حال مرور مجموعه شما است؟ به طور پیش فرض، شما یک دیوار از پوشش جعبه را مشاهده خواهید کرد، با پس زمینه یک قطعه هنر فن با الهام از بازی در حال حاضر انتخاب شده است.
شما می توانید بازی ها را با کلیدهای جهت دار و یا با ماوس مرور کنید .
این یک رابط مفصل است، بنابراین زمان زیادی برای کشف آن خواهید داشت.
اختیاری: Big Box Multi- منوی
برای اکثر کاربران PC، رابط اصلی کاملا کار می کند. اما اگر می خواهید رایانه خود را با استفاده از یک کنترلر از نیمکت خود مرور کنید، یک رابط دیگر برای شما وجود دارد: جعبه بزرگ. این ویژگی که تنها در صورتی ارائه می شود که اگر بخشی از حساب 20 دلاری Launchbox Premium را خریداری کرده باشید، انواع سفارشی سازی و انیمیشن ها را ارائه می دهد.
اگر دوست دارید که این کار را دوست داشته باشید، در نظر گرفتن پرداخت برای ارتقاء.
رکوراسیون در درک من یک پیاده سازی بسیار واضح از تقسیم و هماهنگی است.
رکورد بسیار مفید است، زمانی که ساده تر است مشکل خود را به مشکلات کوچکتر و مشکلات کوچکتر به مشکلات کوچکتر تقسیم کنید برای مقابله با آن ها به طور جداگانه.
بر اساس این درک، من فکر نمی کنم که بازگشت به عنوان یک روش مناسب برای مشکل فیبوناچی است، با توجه به این که برخی از خطرات بالقوه با این ابزار (مانند سرریز پشته) وجود دارد. Recursion می تواند ابزار بسیار قدرتمند برای تولید راه حل های ظریف باشد، اما با قدرت بزرگ مسئولیت بزرگی به عهده می گیرد.
پس از گفتن، من توصیه نمی کنم از بازگشت برای توالی فیبوناچی (یا فاکتوریل) استفاده کنم. اگرچه بسیار مفید است از این پیاده سازی آگاه باشید، من فقط به عنوان آخرین راه حل استفاده از آن را توصیه می کنم، اگر به وضوح در شرایط سخت (در طی یک مصاحبه برنامه نویسی، مثلا) بیان شده است.
با وجود اینکه این کار می کند، من نمی خواهم آن را یک راه حل کامل می نامید. ما میتوانیم بهتر از این انجام دهیم. بیایید ببینیم چه اتفاقی می افتد با تماس با تابع فیبر بازگشتی با یک استدلال 4:
1. فیبر نوری (4) به فیبرتی (3) + فیبوت (2)
2 حل می شود. فیبر نوری (3) فیبر نوری (2) + فیبوت (1)
3 را حل میکند. فیبوت (2) حلقه به 1
4. فیبوت (1) به 1 برمی گردد
5. (1) + fib (0)) … (فیبوناچی (0) حل می شود به 0
fib (4) = فیب (3) + fib (2) = (فیب (2) + fib (1) 19659013] ما در اینجا 1 و 2 نقطه علاقه مند هستیم. همانطور که می توانید دوبار با همان پارامتر خود بایستید. این می تواند و باید اجتناب شود.
پیچیدگی زمان برای این پیاده سازی O (2 ^ n) بسیار بالا است
چگونه می توانیم آن را بهینه سازی کنیم؟
Memoization
Memoization یک روش بهینه سازی است ما همیشه می توانیم استفاده کنیم اگر ما می دانیم که الگوریتم ما یک تابع مشابه را با پارامتر های مشابه چندین بار فراخوانی می کند. به جای اجرای چنین تابع، ما می توانیم نتیجه ی اجرای قبلی را "به یاد داشته باشیم"، اجازه می دهد تا نگاهی به پیاده سازی بسیار اساسی داشته باشیم:
ما از کش متغیر استفاده می کنیم تا به نتیجه ی عملکرد تابع بپردازیم و اگر پارامتر برای اجرای تابع آینده در حال حاضر در حافظه پنهان است و سپس این مقدار را به دست می آوریم.
این پیاده سازی به ما اطمینان می دهد که برای هر تابع تعداد فیبر تنها یکبار اجرا می شود. پیچیدگی زمان برای این پیاده سازی O (n) است که بسیار بهتر از بازگشت مجدد سنتی است. همانطور که در "حلقه و آرایه" پیاده سازی شده است، این نسخه اضافه می کند سربار حافظه برای ذخیره سازی حافظه پنهان ما با پیچیدگی O (n)