شما به این کد توجه کنید :
کد:
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
const barr:array[0..5] of byte=($33,$32,$44,$67,$78,$89);
procedure test(lop:array of byte ) ;
begin
writeln(lop[44]);
end;
begin
test(barr);
readln;
{ TODO -oUser -cConsole Main : Insert code here }
end.
این کد یه آرایه تعریف می کنه با 5 آیتم ولی تو تابع test تا آیتم 10000 هم مقدار داره ونشون می ده .
من می خوام بپرسم این چه جوری ممکنه ؟
و اگه می شه معادل این رو تو وی بی بزارید . :arrow:
اينم جواب شما
اول از همه اين كار غير ممكنه.اگه اين كد رو كامپايل كني در آرايه مقدار 0 بازگشت داده ميشود.
كامپايلر به مقدار آرايه ها توجه نمي كنه و وقتي كه برنامه شما كامپايل ميشه آرايه ها و مقدار ها در نظر گرفته ميشه همين طور كه مي دني مقدار 0 يعني هيچ و در اصل گرفتن آيتمي كه در آرايه اصلا وجود ندارد كاري است انجام شدني اما با مقدار 0
اما در مورد سوال دومت چون وي بي كار نكردم متاسفم
عزیز من
وحید گرامی
هی عمو
این کد رو امتحان کن
حرف الکی که نمی زنم
ای بابا
شما که گوش نمی دی .
ا امتحان کن ببین چه جوری می شه ! اندیس های مختلف بزار .
Toxic_Program نوشته است:عزیز من
وحید گرامی
هی عمو
این کد رو امتحان کن
حرف الکی که نمی زنم
ای بابا
شما که گوش نمی دی .
ا امتحان کن ببین چه جوری می شه ! اندیس های مختلف بزار .
خروجي برابر با 0 بود
اينم عكس مدرك
vahid2000 نوشته است:Toxic_Program نوشته است:عزیز من
وحید گرامی
هی عمو
این کد رو امتحان کن
حرف الکی که نمی زنم
ای بابا
شما که گوش نمی دی .
ا امتحان کن ببین چه جوری می شه ! اندیس های مختلف بزار .
خروجي برابر با 0 بود
خوب شد عصبانيش نكردي وگرنه بهت مي كفت پشگل
خوب سر ریز بافر که می گن همینه دیگه شما یه بافر 5 بایتی داری که از موقعیت 44 داری می خونی که یه جایی از حافظه هست که هر چیزی می تونه باشه چون از یک اشاره گر استفاده می کنی کمپایلر هم نمی فهمه حالا توی همین حافظه یه عدد بنویس می تونی برای اطمینان از بایت صفر تا 1000 رو عدد بدی ببین برنامت هنگ می کنه البته می تونی کد یه برنامه رو بدی
فرض کن یه متغییر 32 بایتی گرفتی تا اسم کار بر رو ذخیره کنی و یکار بر زرنگ می یاد به جای اسمش کدهای یه برنامه که ممکنه چند کیلو باشه رو وارد می کنه البته چند تا کد nop هم برای شروع نیازه و یکم تجربه شما هم بدونه اینکه بدونی کد ها رو توی رم می ریزی و برنامه اون رو اجرا می کنی به جا ی اینکه اسمش رو بگیری
حرف ha_60 كاملا درسته.اين مشكل از اينجا درست ميشه كه كمپايلر هاي فعلي فقط آدرس شروع يك آرايه رو دارن
وقتي مثلا ميگي خونه 44 رو بده كمپايلر ميره و بر اساس نوعي كه گفتي مثلا بايت از آدرس شروع 44 بايت ميره جلو و مقدار بهت ميده (اصلا هم كاري نداره طول واقعي كمتر از اينه واسه همين يه مقدار بي معني بهت برميگردونه .
ha_60 نوشته است:خوب سر ریز بافر که می گن همینه دیگه شما یه بافر 5 بایتی داری که از موقعیت 44 داری می خونی که یه جایی از حافظه هست که هر چیزی می تونه باشه چون از یک اشاره گر استفاده می کنی کمپایلر هم نمی فهمه حالا توی همین حافظه یه عدد بنویس می تونی برای اطمینان از بایت صفر تا 1000 رو عدد بدی ببین برنامت هنگ می کنه البته می تونی کد یه برنامه رو بدی
فرض کن یه متغییر 32 بایتی گرفتی تا اسم کار بر رو ذخیره کنی و یکار بر زرنگ می یاد به جای اسمش کدهای یه برنامه که ممکنه چند کیلو باشه رو وارد می کنه البته چند تا کد nop هم برای شروع نیازه و یکم تجربه شما هم بدونه اینکه بدونی کد ها رو توی رم می ریزی و برنامه اون رو اجرا می کنی به جا ی اینکه اسمش رو بگیری
ایول واقعا ممنون از اینکه یه مطلب تازه رو به من یاد دادید .
فقط یه کوچولو درخواست دیگه --> میشه این کد رو تبدیل کنید به وی بی ؟
ما هم مرده خوري كرديم يه چيزي بلند كرديم