خب سلام اومدیم یه مقدار درباره execve یه توضیح بدیم که احتمالا همتون وقتی یکم با strace کار میکنین این syscall میبینید . کارش بخوام خیلی کوتاه بگم اینه که میاد یه image پروسه فعلی رو با یه برنامه جدید جایگزین میکنه . شاید بگی عین fork هست ولی نه توی این عمل process جدید درست نمیشه بلکه همونه ولی فقط اون برنامه ای که درحال اجرا بود جایگزین میشه و یه برنامه جدید اجرا میشه .
سینتکسش هم به صورت زیره:
pathname خب مربوط به مسیر اون فایل اجرایی هست که میخوایم توی پراسس فعلی اجرا بشه /bin/ls
argv هم مربوط به آرگومان هایی هست که اون فایل اجرایی ما میگیره مثلا ss -t
envp هم مربوط به اون متغیر های Environment هستش.
بخوایم الان با توجه به توضیحایی که بالا دادیم این بخشا رو پر کنیم به صورت زیر در میاد
حالا برای مثال اگه بخوایم ls -la بگیریم متغیر args باید به صورت زیر پر کنیم :
اینم یادتون باشه آخر آرایه هم باید با NULL پر بشه که سیستم بفهمه آرگومان ها کجا به اتمام میرسند .
در واقع اینطوریه :
./main_program:
./program2:
خب توی این بخش میاد آرگومان های داده شده توی برنامه اول رو در برنامه دوم به نمایش میزاره و میشه گفت تمام کاری که میکنه همینه .یه نکته دیگه هم اینه که pid این برنامه اگه 100 بار این وسط برنامه جدید با execve بیاد وسط عوض نمیشه و جدا از اون وقتی یه برنامه جدید با execve اجرا میشه ادامه کدی که توی برنامه اول داریم اجرا نمیشه مگر اینکه به خطا بخوریم توی اجرا کردن برنامه دوم .
و در آخر، کنار execve چندین تابع کتابخانهای هم وجود داره که همگی wrapper هستن و execve رو صدا میزنن execl، execlp، execle، execv و execvp که خب یه سری تفاوت دارن و زیاد توشون دیپ نمیشیم .
➖➖➖➖➖
CHANNEL
سینتکسش هم به صورت زیره:
int execve(
const char *pathname,
char *const argv[],
char *const envp[]
);
pathname خب مربوط به مسیر اون فایل اجرایی هست که میخوایم توی پراسس فعلی اجرا بشه /bin/ls
argv هم مربوط به آرگومان هایی هست که اون فایل اجرایی ما میگیره مثلا ss -t
envp هم مربوط به اون متغیر های Environment هستش.
بخوایم الان با توجه به توضیحایی که بالا دادیم این بخشا رو پر کنیم به صورت زیر در میاد
execve("/bin/ls", args, env);حالا برای مثال اگه بخوایم ls -la بگیریم متغیر args باید به صورت زیر پر کنیم :
char *args[] = {
"ls",
"-l",
"/home",
NULL
};اینم یادتون باشه آخر آرایه هم باید با NULL پر بشه که سیستم بفهمه آرگومان ها کجا به اتمام میرسند .
در واقع اینطوریه :
./main_program:
#include <stdio.h>
#include <unistd.h>
int main()
{
char *args[] = {
"program2",
"hello",
"world",
NULL
};
printf("Before execve\n");
execve("./program2", args, NULL);
printf("After execve\n");
return 0;
}
./program2:
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("I am program2\n");
printf("argc = %d\n", argc);
for (int i = 0; i < argc; i++)
{
printf("argv[%d] = %s\n", i, argv[i]);
}
return 0;
}
خب توی این بخش میاد آرگومان های داده شده توی برنامه اول رو در برنامه دوم به نمایش میزاره و میشه گفت تمام کاری که میکنه همینه .یه نکته دیگه هم اینه که pid این برنامه اگه 100 بار این وسط برنامه جدید با execve بیاد وسط عوض نمیشه و جدا از اون وقتی یه برنامه جدید با execve اجرا میشه ادامه کدی که توی برنامه اول داریم اجرا نمیشه مگر اینکه به خطا بخوریم توی اجرا کردن برنامه دوم .
و در آخر، کنار execve چندین تابع کتابخانهای هم وجود داره که همگی wrapper هستن و execve رو صدا میزنن execl، execlp، execle، execv و execvp که خب یه سری تفاوت دارن و زیاد توشون دیپ نمیشیم .
➖➖➖➖➖
CHANNEL
❤10💔1
Forwarded from 𝙊𝙥𝙚𝙧𝙖𝙩𝙤𝙧 𝙇𝙤𝙜𝙨 (radiant moon)
Domain Fronting Technique in C2 Architectures has Been Explained
read below👇👇👇
read below👇👇👇
❤8
Forwarded from IP4M1R (4M1R)
@Time1Netbot
دوستان عزیز این ربات واسه یکی از رفیقامون و تازه شروع کرده و نیاز به حمایت داره
ربات واسه فروش کانفیگ میخام اگر امکانش هست تو کانالاتون به عنوان تبلیغ بزارید، تست رایگان هم داره واسه سرعت و اینکه خودمم استفاده میکنم کانفیگ هاش خوبه
دمتون گرم❤️
دوستان عزیز این ربات واسه یکی از رفیقامون و تازه شروع کرده و نیاز به حمایت داره
ربات واسه فروش کانفیگ میخام اگر امکانش هست تو کانالاتون به عنوان تبلیغ بزارید، تست رایگان هم داره واسه سرعت و اینکه خودمم استفاده میکنم کانفیگ هاش خوبه
دمتون گرم❤️
❤4