Linux如何隐藏命令行参数

转自http://lightconsulting.com/~thalakan/process-title-notes.html
Paste here in case I forget or this page is gone. :-)

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdarg.h>
#include <malloc.h>

/* Globals */
static char **Argv = ((void *)0);
extern char *__progname, *__progname_full;
static char *LastArgv = ((void *)0);

/* Prototypes */
static void set_proc_title(char *fmt,...);
static void init_set_proc_title(int argc, char *argv[], char *envp[]);

int main(int argc, char *argv[], char *envp[]) {
init_set_proc_title(argc, argv, envp);
set_proc_title("%s", "This is a nifty process title");
printf("DEBUG: %s/n", Argv[0]);

for(;;) {}
return 0;
}

static void init_set_proc_title(int argc, char *argv[], char *envp[])
{
int i, envpsize;
extern char **environ;
char **p;

for(i = envpsize = 0; envp[i] != NULL; i++)
envpsize += strlen(envp[i]) + 1;

if((p = (char **) malloc((i + 1) * sizeof(char *))) != NULL ) {
environ = p;

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

environ[i] = NULL;
}

Argv = argv;

for(i = 0; envp[i] != NULL; i++) {
if((LastArgv + 1) == envp[i]) // Not sure if this conditional is needed
LastArgv = envp[i] + strlen(envp[i]);
}

// Pretty sure you don't need this either
__progname = strdup("proftpd");
__progname_full = strdup(argv[0]);
}

static void set_proc_title(char *fmt,...)
{
va_list msg;
static char statbuf[8192];
char *p;
int i,maxlen = (LastArgv - Argv[0]) - 2;

printf("DEBUG: maxlen: %i/n", maxlen);

va_start(msg,fmt);

memset(statbuf, 0, sizeof(statbuf));
vsnprintf(statbuf, sizeof(statbuf), fmt, msg);

va_end(msg);

i = strlen(statbuf);

snprintf(Argv[0], maxlen, "%s", statbuf);
p = &Argv[0][i];

while(p < LastArgv)
*p++ = '/0';
Argv[1] = ((void *)0) ;
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值