PDA

View Full Version : ret = (int *)&ret + 2 یعنی چی ؟



Developer Programmer
شنبه 12 فروردین 1385, 23:43 عصر
سلام دوستان
ممکنه لطف کنین توضیح بدین این تکه کد مفهموش چیه ؟ ( خیلی وقته که C کار نمیکنم, بعضی از مفاهیمش رو فراموش کردم)



*(long *) &stuffing[i] = 0x80484bb;

و


int *ret;
ret = (int *)&ret + 2;
(*ret) = (int)code;

با تشکر

Nasser_Far
یک شنبه 13 فروردین 1385, 00:24 صبح
با سلام
کد اولی مقدار 0x80484bb هگز رو تو خونه i ام آرایه stuffing قرار میده
کد دومی :
در سطر اول یه متغیر از نوع اشاره گر از نوع int تعریف میکنه
درسطر دوم خطا داره . چون اشاره گر قبل از استفاده باید مقدار دهی اولیه بشه.
در سطر سوم مقدار متغییر code در خانه ای از حافظه که ret به آن اشاره میکند ریخته میشود.

Developer Programmer
دوشنبه 14 فروردین 1385, 11:34 صبح
سلام
ممنون از پاسختون
چرا با وجود علامت * از & استفاده می کنه ؟


main()
{
int i=0;
char stuffing[44];

for (i=0;i<=40;i+=4)
*(long *) &stuffing[i] = 0x80484bb;
puts(stuffing);
}



char code[] =
"SomeThing"

int main()
{

int *ret;
ret = (int *) &ret + 2;
(*ret) = (int)Code;
}

Nasser_Far
دوشنبه 14 فروردین 1385, 21:14 عصر
علامت & آدرس متغیر رو برمیگردونه ولی * محتوای آدرس رو