PDA

View Full Version : حرفه ای: اجرا کردن یک پروژه برای intercept systemcall



arashmidos2020
پنج شنبه 12 فروردین 1389, 20:44 عصر
سلام پیرو بحث intercept system calls یک پروژه رو پیدا کردم می خوام ببینم اینجور پروژه ها رو چطور باید اجرا کنم؟
اگر کسی علاقه داره لطفا با من همکاری کنه تا به جاهای خوبی برسیم:
مثلا من فایل های gridbox.c,gridbox.h,syscalls.c,syscalls.h, acl.c,acl.h رو با هم در یک پروژه اجرا می کنم و بعد با ترمینال فایل tect.c رو اجرا می کنم.
اما هر دو اجرا میشن و هیچ تاثیری روی هم ندارن. چرا؟ به خاطر اینکه اصل کار رو فایل libgridbox.c انجام میده و سیستم کال ها رو عوض می کنه اما نمی دونم چه موقع اجرا میشه!! و وقتی به پروژه اضافه می کنمش کلی اررور میده.
لطفا اساتیدی که تو ران کردن پروژه های open source ماهر هستند کمک کنند.

اینم بگم اگه یک نگاه به فال ها بندازید متوجه میشید کاملا چطوری کار می کنه اما من فعلا می خوام کامل رانش کنم ببینم چطوریه
ممنون

a.gh.n
پنج شنبه 12 فروردین 1389, 23:35 عصر
شما وقتی make gridbox.so رو انجام میدید فایل آبجکتی از libgridbox.c هم به gridbox.so شیر میشه. دیگه لازم نیست تو برنامتون از فایل gridbox.c استفاده کنید. ظاهرا همون متغیر LD_PRELOAD کار خودش رو باید انجام بده. برنامه رو به این صورت ران کردم:

$ LD_PRELOAD=./gridbox.so ./test
که تست فایل اجرایی test.c هست. دستورات هم مقدار ALLOWED رو نشون دادن. شما مشخصات پروژه ای که خودتون باهاش نوشتین رو می فرمایید؟

arashmidos2020
پنج شنبه 12 فروردین 1389, 23:54 عصر
بسیار ممنونم از وقتی که گذاشتید.بله منم از همین طوری اجرا کردم.
چطوری میشه همین کارو با یک IDE مثل codeblocks انجم داد؟اونجا چطوری میشه makefile رو بهش فهموند؟
من با codeblocks در ubuntu 9.4 کار می کنم.

بازم ممنون از کمک بزرگتون

a.gh.n
جمعه 13 فروردین 1389, 10:15 صبح
make هیچ چیز خاصی نیست! یک سری آرگومان داره (مثلا اینجا gridbox.so یا all یا clean) و به ازای هر کدوم از اونها دستوراتی برای کمپایل و لینک کردن داره. شما می تونید اون دستورات رو مستقیما بدون نیاز به خود فایل makefile اجرا کنید. محتویات فایل makefile رو ببینید متوجه می شید.
معنی این ها اینه که من با codeblocks کار نکردم! ;)

arashmidos2020
یک شنبه 15 فروردین 1389, 19:56 عصر
یک چیز برای من معلوم نشد.چطور میشه سیستم کال هایی که توسط فایل libgridbox.c تغییر کرده اند با سیستم کال های مربوطه شون عوض بشه در صورتی که توی هیچ فایل دیگههیچ اسمی نه از فانشکن هاش و نه از متغیرهاش برده شده؟!
این فایل که از هیج جا لینک نشده چطور میتونه فعالیتشو انجام بده توی .so ? حالا اصلا بیاد و libgridbox.o هم جزو .so بشه اما چطور میشه که تاثیر گذار میشه؟
منظورم رو رسوندم؟

a.gh.n
دوشنبه 16 فروردین 1389, 10:27 صبح
بله توی libgridbox.so کمپایل شده ی اون فانکشن ها میاد. یعنی بعد از تغییر فایل دوباره باید make رو ران کنید. برای دیدن محتویات فایل gridbox.so ران کن:

nm ./gridbox.so
از اینجا می‌تونید مطمئن باشید فانکشنی که می‌نویسید توی لایبرری می‌ره یا نه.

arashmidos2020
شنبه 28 فروردین 1389, 19:54 عصر
بعد از تبدیل اون به سی پلاس پلاس و یک مقدار ناچیزی تغییر،به این مشکل برخوردم.

syscalls.o:(.bss+0x0): multiple definition of `rules'
libgridbox.o:(.bss+0x0): first defined here

توی کل پروژه rules یکبار در systemcall.h و یکبار هم در acl.h به صورت extern تعریف شده

arashmidos2020
شنبه 28 فروردین 1389, 21:06 عصر

??؟؟
؟؟؟???
????؟؟؟؟

arashmidos2020
شنبه 28 فروردین 1389, 23:43 عصر
کسی نمی دونه مشکل چیه؟