برگزیده های پرشین تولز

برنامه ای به زبان c بنویسید که source خود را به عنوان خروجی نمایش دهد

vahidrk

کاربر قدیمی پرشین تولز
تاریخ عضویت
2 جولای 2005
نوشته‌ها
3,511
لایک‌ها
561
سن
37
محل سکونت
Home
کسی می تونه برام بنویسه؟
18.gif

سوال یه جور مسابقست.منم که از c چیزی سر در نمی یارم:blush:
 

gooliof_iran

کاربر تازه وارد
تاریخ عضویت
19 ژانویه 2005
نوشته‌ها
99
لایک‌ها
1
اگر منظورتون Source خود برنامه است
خوب به صورت رشته در متن برنامه آن را قرار دهيد و در خروجي آن را چاپ كنيد.
در غير اينصورت سوالتان را واضح تر بيان كنيد.
:hmm:
 

vahidrk

کاربر قدیمی پرشین تولز
تاریخ عضویت
2 جولای 2005
نوشته‌ها
3,511
لایک‌ها
561
سن
37
محل سکونت
Home
به نقل از gooliof_iran :
اگر منظورتون Source خود برنامه است
خوب به صورت رشته در متن برنامه آن را قرار دهيد و در خروجي آن را چاپ كنيد.
در غير اينصورت سوالتان را واضح تر بيان كنيد.
:hmm:
ناراحت نشین...تقصیر من نیست.
این درست عین سوالی هست که توی برد دانشگاهمون زدن.مطمئنا خیلی سادس.
احتمالا همینه:
اگر منظورتون Source خود برنامه است
خوب به صورت رشته در متن برنامه آن را قرار دهيد و در خروجي آن را چاپ كنيد.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
http://forum.itengineering.org/
در اين فروم يك تاپيك بود كه جواب شما را گذاشته .
يعني بدون داشتن سورس، فايل اگزه سورس خود را چاپ مي كند.
ولي اول بايد ثبت نام كنيد. و با اسم و فاميل فارسي ، با فونت فارسي.
من عضو بودم ولي نتوانستم الان وارد بشوم. ببخشيد مدتيه درگيرم نمي رسم. از بابت تاخير هم معذرت مي خواهم. اگر سورس را داريد و مي توانيد مثل يك فايل متني چاپش كنيد كه ديگه معما نيست. در سايت مجيدآنلاين يك تاپيك است كه
longhorn
جوابش را داده. از او هم اگر بخواهيد سورس آن فورم كه بايد عضو بشيد را به شما خواهد داد.
به من داد. 3 خط بود. ولي من الان در هارد ندارم.
.
 

ruiner_zer0

کاربر تازه وارد
تاریخ عضویت
6 نوامبر 2005
نوشته‌ها
38
لایک‌ها
1
کاری نداره که کافیه در اول برنامه بعد از:

کد:
[LEFT]#include 
main()[/LEFT]

از
کد:
printf("inja\n")
استفاده کنی
بعدش برنامه رو می نویس ادامشو بعد که کامپایله کردی اول سورس رو نشون میده بعدش خود برنامه هم که همزمانش اجر شده.:)
 

the_patriot

Registered User
تاریخ عضویت
18 مارس 2006
نوشته‌ها
104
لایک‌ها
0
اگر منظور سورس خود برنامه باشد فکر کنم کار بیهوده ای باشد نوشتن چنین برنامه ای ولی اگر برنامه قابلیت استخراج سورس را داشته باشد خفن برنامه ای خواهد بود!! یعنی اینکه برنامه قصدش فقط چاپ کد نباشد بلکه مهندسی معکوس برنامه و بدست آوردن کد ابتدایی و کد از آبجکت و فایل اجرایی! نوشتن این برنامه با سی ++ امکان پذیره ولی خیلی سخته!
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
اون چيزي كه من منظورم بود اين بود كه چند خط برنامه اضافه ميشه به برنامه و باعث ميشه كه سورس برنامه چاپ بشه.
ولي تحليل ها مختلف شده.
دوست عزيز(استارتر تاپيك) ، من الان ديدم
longhorn
در سايت ديگري آنلاين است، آدرس اين تاپيك را دادم تا كد را بگذارد.
در ضمن در آن سورس از
printf
هم استفاده شده بود ولي خيلي كد عجيبي بود. تحليلش راحت نبود.
فكر كنم يه جورايي از اشاره گر استفاده مي كرد.
.
 

gooliof_iran

کاربر تازه وارد
تاریخ عضویت
19 ژانویه 2005
نوشته‌ها
99
لایک‌ها
1
در جواب يكي از تاپيكها در مورد مهندسي معكوس
فكر مي كنم كه بايد واقعا به زبان ماشين و آدرسهاي حافظه مسلط باشيم تا بتونيم چنين كاري رو بكنيم.
يعني سرس برنامه اجرائي رو با استفاده از مهندسي معكوس به دست بياريم.
چون معلوم نيست كه كه كامپايلر چي بوده.
فقط از انجام همون چهار عمل اصلي كامپيوتر مي شود با استفاده از مهندسي معكوس شبيه سرس را بدست آورد.
فكر مي كنم در مورد زبان برنامه نويسي ماشين و مهندسي معكوس در اين سايت بحث مفصلي شده است:
http://www.barnamenevis.org/forum/
در اينجا ساتيد با تجربه اي هستند كه مي تونن كمك كنن.:f34r:
 

shankimout

Registered User
تاریخ عضویت
17 می 2004
نوشته‌ها
1,524
لایک‌ها
3
محل سکونت
ساری . . . . . . . . . . . . . . Permanently Bann
ببینیم سالک خان اینی که شما میگی چه سورس رو نمایش میده ؟ C یا ASM ؟
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
سلام عزيز.
ببينيد چند خط برنامه است كه جزو سورس است و ما خودمان داخل كدمان گذاشته ايم.
و موقع اجراي اين برنامه به زبان سي سورس چاپ ميشه.
اگر لانگ هورن نيامد خودم مي روم كد را پيدا مي كنم و اين جا مي گذارم.
سورس ويژوال سي اش را هم پيدا كردم در يك سايت خارجي.
ولي به قول جناب پاتريوت كه در بالا فرموده كار بيهوده اي است. من هم استفاده اي براش بلد نيستم. يك جور سرگرمي است فقط. البته شايد من دارم بد نظر ميدم. شايد يه كاربردهايي هم داشته باشه.
.
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
با سلام
در مورد اینکه از روی فایل اگزه بشه سورس برنامه را در اورد ( یعنی خود فایل نه ) این کار تقریبا یعین به احتمال 99.99 درصد برای سی امکان پذیر نیست . اما میشه کد اسمبلی ان را در اورد
اما در مورد چاپ سورس این روش معمولا برای تدریس استفاده میشه . شما ممکنه کد رو از کسی بگیرد تغییر بدید یعنی جملات نمایش رو بعد بدید استاد و بعد استاده برنامه را ران کرده و جواب صحیح بگیره . اما با این کار دیگه سورس کاملا معلوم میشه
 

shankimout

Registered User
تاریخ عضویت
17 می 2004
نوشته‌ها
1,524
لایک‌ها
3
محل سکونت
ساری . . . . . . . . . . . . . . Permanently Bann
سلام عزيز.
ببينيد چند خط برنامه است كه جزو سورس است و ما خودمان داخل كدمان گذاشته ايم.
و موقع اجراي اين برنامه به زبان سي سورس چاپ ميشه.
اگر لانگ هورن نيامد خودم مي روم كد را پيدا مي كنم و اين جا مي گذارم.
سورس ويژوال سي اش را هم پيدا كردم در يك سايت خارجي.
ولي به قول جناب پاتريوت كه در بالا فرموده كار بيهوده اي است. من هم استفاده اي براش بلد نيستم. يك جور سرگرمي است فقط. البته شايد من دارم بد نظر ميدم. شايد يه كاربردهايي هم داشته باشه.
.

اها . در واقع سورس در یک متغیر ذخیره میشه و موقع اجرا چاپ میشه .

من یه لحظه فکر کردم با چند تابع و کد سورس سی را بدون اینکه از قبل ان را در جایی ذخیره کند چاپ میکنه
 

vahidrk

کاربر قدیمی پرشین تولز
تاریخ عضویت
2 جولای 2005
نوشته‌ها
3,511
لایک‌ها
561
سن
37
محل سکونت
Home
دوستان این چیزی که من می گم مطمئنا خیلی سادست.چون سوال دوم که بعد از اون نوشته بود درمورد ویروس بلستر و روش نابود سازی اون بود.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
به نقل از shankimout :
اها . در واقع سورس در یک متغیر ذخیره میشه و موقع اجرا چاپ میشه .

با سلام.
منظور شما اين است فكر كنم. از:
http://www.cprogramming.com/challenges/solutions/self_print.html

. Getch را من اضافه كردم تا نتيجه را ببينم. در سايت اين قسمت نبود.
البته جواب استارتر نيست و براي شما هم جالب نيست ولي چون موقع سرچ پيدا كردم ، گفتم دوستان ديگر هم ببينند.

کد:
#include <stdio.h>
#include <conio.h>
char *program = "#include <stdio.h>%cchar *program = %c%s%c;%cint main()%c{%cprintf(program, 10, 34, program, 34, 10, 10, 10, 10, 10, 10);%c    return 0;%c}%c";
int main()
{
	printf(program, 10, 34, program, 34, 10, 10, 10, 10, 10, 10);
	getch();
        return 0;
}
.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
در اين آدرس هم ، براي وقتي خوبه كه فايل سورس را بخواهيم چاپ كنيم.
البته من اين را تست نكردم ، چون با چاپ ديگر فايلها هيچ فرقي نداره.

http://www.iwebthereforeiam.com/programming/selfWrite.asp

کد:
void main (void)
{
FILE *fp = fopen ("selfWrite.cpp", "r");
if (NULL != fp)
{
int c;
while (EOF != (c = getc(fp)))
putchar(c);
fclose (fp);
}
}
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
جمع بندي:
من با توجه به نظر دوستان به اين نتيجه گيري رسيدم كه :
موقع كامپايل ، سورس ما تبديل به كدهاي اسمبلي مي شود. و ابدا نمي توانيم به راحتي به سورس سي دسترسي پيدا كنيم.
به نقل از saeedsmk :
با سلام
در مورد اینکه از روی فایل اگزه بشه سورس برنامه را در اورد ( یعنی خود فایل نه ) این کار تقریبا یعین به احتمال 99.99 درصد برای سی امکان پذیر نیست . اما میشه کد اسمبلی ان را در اورد
دوستي در اين تاپيك به تفاوتهاي كامپايلرها اشاره كرده. يعني كه نمي توانيم به راحتي راه برگشت از اسمبلي به سوي سورس سي را برويم.
به نقل از gooliof_iran :
فكر مي كنم كه بايد واقعا به زبان ماشين و آدرسهاي حافظه مسلط باشيم تا بتونيم چنين كاري رو بكنيم.
يعني سرس برنامه اجرائي رو با استفاده از مهندسي معكوس به دست بياريم.
چون معلوم نيست كه كه كامپايلر چي بوده.
فقط از انجام همون چهار عمل اصلي كامپيوتر مي شود با استفاده از مهندسي معكوس شبيه سرس را بدست آورد.
:

در كل راه حل همان است كه در چند پست بالاتر دوستمان shankimout گفته.
يعني نگذاريم سورس كامپايل بشه ، كه مي آيد سورس را در يك متغير ذخيره مي كند. و بعد آن متغير را چاپ مي كند.
شايد راههاي ديگري هم وجود داشته باشد ولي براي دور نگه داشتن سورس از دسترس كامپايل اين ساده ترين راه است. راههاي ديگر را من نمي دانم.

البته اين نظر من بود كه با توجه به نظرات دوستان دادم. اگر دوستان نظر كاملتري دارند بفرمايند.

پس به سئوال كننده پيشنهاد مي كنم كه همان برنامه كه من گذاشتم كه آمده سورس را در يك متغير ذخيره كرده را به عنوان جواب برگزيند.
با تشكر از كمك تمامي دوستان.
تاپيك خيلي مفيد وجالبي بود. مقدار زيادي باعث شفاف سازي و رفع شبهات بود.
.
 

longhorn0

کاربر تازه وارد
تاریخ عضویت
4 دسامبر 2003
نوشته‌ها
6
لایک‌ها
0
سلام
آقا مجید شرمنده من تازه متوجه این پیغام شما شدم . ( همین الان دیدم کاشکی تو یاهو برام میفرستادی ) خلاصه شرمنده ات هستم .
در مورد این برنامه هم که اینجا بحث شده یه برنامه تو این آدرس وجود داره به زبان c که دقیقاً همین کار رو میکنه .
ولی انگار بحث شما به نتیجه رسیده ولی چون شما امر کرده بودی من این آدرس رو اینجا میزارم شاید به درد دوستان خورد .

کد:
http://forum.itengineering.org/showthread.php?t=222

ولی همون طور که آقا مجید فرموده اند تو این forum باید عضو بشید برای این کار هم باید از نام و نام خانوادگی به زبان انگلیسی استفاده کنید و از نام واقعی و نه اسم مستعار .​
 

longhorn0

کاربر تازه وارد
تاریخ عضویت
4 دسامبر 2003
نوشته‌ها
6
لایک‌ها
0
خواهش میکنم . وظیفه بود .
 
بالا