在windows上构建netcat,在源代码中编辑argv参数
我想更改windows上netcat应用程序的源代码。 目标是在源代码中声明参数并构建它,所以我只需要启动程序 它正在发挥作用 源代码的第一行如下所示:在windows上构建netcat,在源代码中编辑argv参数,c,windows,main,netcat,C,Windows,Main,Netcat,我想更改windows上netcat应用程序的源代码。 目标是在源代码中声明参数并构建它,所以我只需要启动程序 它正在发挥作用 源代码的第一行如下所示: main (argc, argv) int argc; char ** argv; 我想像这样改变它 argv = "commandline arguments": 我已经尝试了(很长时间)不同的解决方案 但它不起作用 我想我需要一个带指针的解决方案。。。但是我当然不确定。argv包含一个指向字符串本身的指针数组: char *my_arg
main (argc, argv)
int argc;
char ** argv;
我想像这样改变它
argv = "commandline arguments":
我已经尝试了(很长时间)不同的解决方案
但它不起作用
我想我需要一个带指针的解决方案。。。但是我当然不确定。
argv
包含一个指向字符串本身的指针数组:
char *my_argv[] = {
"arg 0",
"arg 1",
"arg 2",
"...",
"arg N",
NULL
};
int my_argc = N;
从那里,通常最容易将现有的main
重命名为其他名称,然后创建一个新的main
,调用重命名版本:
int main(){
// argv & argc from above
return renamed_main(my_argc, my_argv);
}
您需要创建指向可变字符串的指针数组,以
NULL
结尾。还要记住,argv[0]
表示程序名,而不是提供的参数。例如,如果您希望netcat的行为就像是通过命令nc-l-p80
调用它一样,您可以执行以下操作:
char arg0[] = "nc";
char arg1[] = "-l";
char arg2[] = "-p";
char arg3[] = "80";
char *fixed_argv[] = { arg0, arg1, arg2, arg3, NULL };
argc = 4;
argv = fixed_argv;
那么,你是说你不想在命令行上传递参数,而是为程序内部的默认设置C或C++?选择一个…请不要使用K&R风格的函数定义…
argv
应该是NULL
终止的,字符串本身必须是可变的(因此字符串文字不合适)。@caf:是的,启动代码就是这样做的。除非原始的main
是真正疯狂的,否则两者都不是真正需要的。添加空终止符也很容易,但如果您真的不需要它,那么让字符串可变是愚蠢的(在这种情况下,如前所述,现有的代码真的很疯狂,应该重写)。很容易想象命令行参数都不区分大小写的代码,因此,将参数字符串转换为小写,以便使用strcmp()
来比较它们…@caf:我可以想象各种各样的疯狂——但它仍然是疯狂的,毫无疑问。非常感谢,它是有效的!我发现这不是问题所在,我以前有一个解决方案,但我想使用-e选项,它没有包含在源代码中,但在exe文件中,它是,所以它无法工作。