精品专区-精品自拍9-精品自拍三级乱伦-精品自拍视频-精品自拍视频曝光-精品自拍小视频

網(wǎng)站建設(shè)資訊

NEWS

網(wǎng)站建設(shè)資訊

Linux下查看進(jìn)程信息的途徑以及修改進(jìn)程名的方法

本篇內(nèi)容介紹了“Linux下查看進(jìn)程信息的途徑以及修改進(jìn)程名的方法”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

成都創(chuàng)新互聯(lián)公司服務(wù)緊隨時代發(fā)展步伐,進(jìn)行技術(shù)革新和技術(shù)進(jìn)步,經(jīng)過十多年的發(fā)展和積累,已經(jīng)匯集了一批資深網(wǎng)站策劃師、設(shè)計師、專業(yè)的網(wǎng)站實施團(tuán)隊以及高素質(zhì)售后服務(wù)人員,并且完全形成了一套成熟的業(yè)務(wù)流程,能夠完全依照客戶要求對網(wǎng)站進(jìn)行成都做網(wǎng)站、網(wǎng)站制作、建設(shè)、維護(hù)、更新和改版,實現(xiàn)客戶網(wǎng)站對外宣傳展示的首要目的,并為客戶企業(yè)品牌互聯(lián)網(wǎng)化提供全面的解決方案。

前言

Linux下查看進(jìn)程信息的途徑通常有以下幾種方式

途徑說明
top、ps等命令通過ps及top命令查看進(jìn)程信息時,只能查到相對路徑,查不到的進(jìn)程的詳細(xì)信息,如絕對路徑等。常用命令如下
ps -A 查看所有進(jìn)程名稱;
ps -ef 接顯示進(jìn)程絕對路徑及參數(shù);
ps -aux顯示所有用戶進(jìn)程狀態(tài),最后一列顯示進(jìn)程絕對路徑及參數(shù);
top命令 參考http://c.biancheng.net/view/1065.html
/proc/pid/文件夾Linux在啟動一個進(jìn)程時,系統(tǒng)會在/proc下創(chuàng)建一個以pid命名的文件夾,在該文件夾下會有我們的進(jìn)程的信息,其中包括一個名為exe的文件即記錄了絕對路徑,通過ll或ls –l命令即可查看。exe實際運行程序的符號鏈接;
cmdline 一個只讀文件,包含進(jìn)程的完整命令行信息;
comm 包含進(jìn)程的命令名;
cwd 進(jìn)程當(dāng)前工作目錄的符號鏈接;
status 進(jìn)程狀態(tài)信息,包含的信息多于stat;
stat 進(jìn)程狀態(tài)信息;
cwd 進(jìn)程當(dāng)前工作目錄的符號鏈接;
latency 顯示哪些代碼造成的延時比較大;
environ記錄了進(jìn)程運行時的環(huán)境變量;
fd目錄下是進(jìn)程打開或使用的文件的符號連接。

初級隱藏篇介紹以下兩種方式修改隱藏進(jìn)程名

1. 通過修改進(jìn)程argv[0]修改進(jìn)程名
2. 通過Linux prctl修改進(jìn)程名

一、通過修改進(jìn)程argv[0]修改進(jìn)程名

優(yōu)缺點:

優(yōu)點是ps -ef 、ps -aux看不到進(jìn)程名及參數(shù)了

缺點是這種方法僅僅是修改了/prco/pid/cmdline 的值,使用ps -A 或者top 命令還是可以看到進(jìn)程名稱

我們知道在一個程序中,參數(shù)的個數(shù)保存在int型argc中,參數(shù)保存在數(shù)組argv[]中,數(shù)組的第一個元素argv[0]保存的就是進(jìn)程名,第二個元素argv[1]保存的是第一個參數(shù),依次類推。通過修改進(jìn)程argv[0]修改進(jìn)程名,這一方法實現(xiàn)比較簡單,我們只要在進(jìn)程啟動mian函數(shù)中修改掉argv數(shù)組所指向的內(nèi)存空間的內(nèi)容即可,這里需要注意的是 linux中main()還有一個隱藏參數(shù)就是環(huán)境變量信息,存放了運行時所需要的環(huán)境變量,

  1. 如果新名稱比argv[0]的長度小,我們可以直接修改,并把多余的部分請0

  2. 如果新名稱比argv[0]長我們需要兩步

1) 申請新內(nèi)存保存環(huán)境變量信息和argv[1…argc-1]參數(shù)信息

2) 修改argv[0],將新名稱往后到environ的最后一項清0

以下示例代碼僅僅是將argv[]清空

#include 
#include 
#include 
#include 
int main(int argc, char **argv) {


    printf("========== Before the modification ============\n");
    printf("ProcessName: %s\n", argv[0]);
    for(int i = 1; i < argc; i ++){
        printf("Argv%d: %s\n", i, argv[i]);
    }


    /* Start the modification */
    int new_argc = argc;
    char ** new_argv = malloc((argc+1) * sizeof(*new_argv));
    for(int j = 0; j < argc; j++)
    {
        size_t length = strlen(argv[j]) + 1;
        new_argv[j] = malloc(length);
        memcpy(new_argv[j], argv[j], length);
        memset(argv[j], '\0', length);
    }


    printf("========== After the modification ============\n");
    printf("ProcessName: %s\n", argv[0]);
    for(int i = 1; i < argc; i ++){
        printf("Argv%d: %s\n", i, argv[i]);
    }


    printf("========== Copy data ============\n");
    printf("ProcessName: %s\n", new_argv[0]);
    for(int k = 1; k < new_argc; k ++){
        printf("Argv%d: %s\n", k, new_argv[k]);
    }


    sleep(1000);
    return 0;
}

二、通過Linux prctl修改進(jìn)程名

優(yōu)缺點:

優(yōu)點是修改了/prco/pid/stat及/prco/pid/status中的進(jìn)程名稱,使用ps -A 或者top 命令看不到原來的進(jìn)程名稱

缺點是未修改/prco/pid/cmdline 的值,使用ps -ef 、ps -aux可以看到進(jìn)程名稱及參數(shù)

使用prctl修改進(jìn)程名實現(xiàn)也比較簡單,

看下面代碼

/*
gcc changetitle.c -o changetitle
*/
#include 
#include 

int main(int argc, char *argv[], char *envp[])
{
    char *new_name = "1234567890abcdefg";
    
    getchar();
    prctl(PR_SET_NAME, new_name);
    getchar();




    return 0;
}

但是prctl修改的進(jìn)程名,只能是16個字節(jié)(包括’\0’),當(dāng)新名稱長度大于16時就會截斷,上面的新名字截斷后是1234567890abcde

ubuntu18@ubuntu:~/Desktop/change_processname$ ps -A | grep chang

ubuntu18@ubuntu:~/Desktop/change_processname$ ps -A | grep 1234

10764 pts/8    00:00:00 1234567890abcde

ubuntu18@ubuntu:~/Desktop/change_processname$ cat /proc/10764/stat

10764 (1234567890abcde) S 10709 10764 10709 34824 10764 4194304 69 0 0 0 0 0 0 0 20 0 1 0 14090125 4612096 197 18446744073709551615 94579895803904 94579895806128 140721599190352 0 0 0 0 0 0 1 0 0 17 0 0 0 0 0 0 94579897904560 94579897905168 94579902476288 140721599193924 140721599193938 140721599193938 140721599197162 0

三、兩者方法相結(jié)合

我們可以發(fā)現(xiàn),使用以上兩種方法相結(jié)合,可以使得 ps -ef 、ps -aux 、ps -A 、top、/proc/pid/status、/proc/pid/cmdline 均看不到真實的進(jìn)程信息;

看下面代碼:

/*
gcc changetitle.c -o changetitle
*/
#include 
#include 
#include 
#include 
#include 
#include 


# define MAXLINE 2048


extern char **environ;


static char **g_main_Argv = NULL;    /* pointer to argument vector */
static char *g_main_LastArgv = NULL;    /* end of argv */


void setproctitle_init(int argc, char **argv, char **envp)
{
    int i;


    for (i = 0; envp[i] != NULL; i++) // calc envp num
        continue;
    environ = (char **) malloc(sizeof (char *) * (i + 1)); // malloc envp pointer


    for (i = 0; envp[i] != NULL; i++)
    {
        environ[i] = malloc(sizeof(char) * strlen(envp[i]));
        strcpy(environ[i], envp[i]);
    }
    environ[i] = NULL;


    g_main_Argv = argv;
    if (i > 0)
        g_main_LastArgv = envp[i - 1] + strlen(envp[i - 1]);
    else
        g_main_LastArgv = argv[argc - 1] + strlen(argv[argc - 1]);
}


void setproctitle(const char *fmt, ...)
{
    char *p;
    int i;
    char buf[MAXLINE];


    extern char **g_main_Argv;
    extern char *g_main_LastArgv;
    va_list ap;
    p = buf;


    va_start(ap, fmt);
    vsprintf(p, fmt, ap);
    va_end(ap);


    i = strlen(buf);


    if (i > g_main_LastArgv - g_main_Argv[0] - 2)
    {
        i = g_main_LastArgv - g_main_Argv[0] - 2;
        buf[i] = '\0';
    }
    //修改argv[0]
    (void) strcpy(g_main_Argv[0], buf);


    p = &g_main_Argv[0][i];
    while (p < g_main_LastArgv)
        *p++ = '\0';
    g_main_Argv[1] = NULL;
    
    //調(diào)用prctl
    prctl(PR_SET_NAME,buf);
}


int main(int argc, char *argv[])
{
    char argv_buf[MAXLINE] = {0}; // save argv paramters
    int i;


    for( i = 1; i < argc; i++)
    {
        strcat(argv_buf, argv[i]);
        strcat(argv_buf, " ");
    }
    
    //修改argv[0]所指向的內(nèi)存空間的內(nèi)容
    setproctitle_init(argc, argv, environ);
    
    //調(diào)用prctl修改進(jìn)程名
    setproctitle("%s@%s %s", "12345678", "ip", argv_buf);


    for (i = 0; environ[i] != NULL; i++)
        free(environ[i]);
    getchar();


    return 0;
}

但是這樣還是有一定的局限性,比如說,ps、top等命令還是能看見真實的pid信息,proc文件夾下還是會生成相應(yīng)的pid文件夾;最理想的情況應(yīng)該是讓我們的進(jìn)程信息徹底消失。

“Linux下查看進(jìn)程信息的途徑以及修改進(jìn)程名的方法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!


當(dāng)前題目:Linux下查看進(jìn)程信息的途徑以及修改進(jìn)程名的方法
網(wǎng)頁鏈接:http://m.jcarcd.cn/article/jiocci.html
主站蜘蛛池模板: 韩漫画免费观看 | 国产传媒在线播放 | 国产福利小视 | 国产精品强上在线 | 国产午夜伦伦午夜伦 | 国产妇女性爽视频 | 国产三区四区五 | 国产福利片免费看 | 国产精国产精品 | 国产日本精品视频 | 黑人操中国女人 | 日韩亚洲人成影院 | 午夜福利免费体验区 | 日本三级在线 | 午夜影视在线播 | 日本遊學 | 人人干97 | 国产福利观看 | 国产v片| 欧美日韩午夜大片 | 午夜剧场 | 欧美在线综合视频 | 国产高清在线a视频 | 国产玉足榨精视 | 日韩国产不卡在 | 日本高清在线一 | 国产成a人片在线 | 国产日韩欧美小视频 | 福利导航h污下载 | 欧美性色黄| 国产日韩xxx综合 | 老司机免费 | 午夜最污视 | 欧洲无毛性XXXX | 日韩逼穴美女区欧美 | 成人亚洲性情网站w | 91午夜福利影视 | 精品自拍三级乱伦 | 亚洲无码视频在线观看 | 欧美日韩在线视 | 日本免费成人 |