草庐IT

register_argc_argv

全部标签

python - 使用 os.execlp 时,为什么 `python` 需要 `python` 作为 argv[0]

代码是这样的:os.execlp('python','python','child.py',#otherargs#)#thisworksos.execlp('python','child.py',#otherargs#)#thisdoesn'twork我读了这个问题:execlp()inpython但我还是很困惑。回答说:Thefirstargumentistheprogramtoexecute(foundonthePATH).Therestarethesys.argvargumentstotheprogram.但是,如果我运行:pythonchild.py123并且此过程的sys.a

在 Linux 中更改进程名称而不更改 argv[0]

我需要修改我的C语言程序的进程名。我准确地说,这不是我要更改的线程名称。我想更改我的程序的名称,但我找到的唯一解决方案是修改argv[0]的值。我还找到了另一个使用prctl(PR_SET_NAME,"newname")的解决方案,但这个解决方案不起作用。 最佳答案 调用prctl和修改argv[0]的区别是:modifyargv[0]改变/proc/$pid/cmdline中的信息调用prctl(PR_SET_NAME)更改/proc/$pid/status中的信息这意味着您将获得发出ps-a和ps-ax的进程的不同名称。如果您在

php - undefined variable argc PHP

我正在尝试执行这段代码:functionmain(){if($argc但我收到以下错误:PHPNotice:Undefinedvariable:argcin/home/me/test.phponline15我以为$argv和$argc是全局变量。我怎样才能摆脱这个错误?我正在从命令行运行它。 最佳答案 添加一个global$argc,$argv;之后functionmain(){这些变量在全局范围内,但不在您的函数范围内。global关键字导入它们。 关于php-undefinedvar

c - 为什么 execve 系统调用可以在没有任何 argv 参数的情况下运行 "/bin/sh"而不是 "/bin/ls"?

我对__NR_execve的系统调用感到困惑。在我学习linux系统调用的时候。我知道使用execve的正确方法是这样的:char*sc[2];sc[0]="/bin/sh";sc[1]=NULL;execve(sc[0],sc,NULL);然后函数execve将调用syscall()进入系统内核并将参数放入寄存器EAX,EBX、ECX和EDX。但是,如果我使用它仍然会成功execve("/bin/sh",NULL,NULL);但是如果我将"/bin/sh"替换为"/bin/ls",它会失败:ANULLargv[0]waspassedthroughanexecsystemcall.我想

linux - x86 程序集 : Before Making a System Call on Linux Should You Save All Registers?

我有下面的代码打开一个文件,将其读入缓冲区,然后关闭文件。关闭文件系统调用要求文件描述符号在ebx寄存器中。ebx寄存器在进行read系统调用之前获取文件描述符编号。我的问题是我应该在进行读取系统调用之前将ebx寄存器保存在堆栈中或某处(int80h是否会破坏ebx寄存器?)。然后恢复关闭系统调用的ebx寄存器?或者我下面的代码是否安全?我已经运行了下面的代码并且它有效,我只是不确定它是否通常被认为是好的汇编实践,因为我没有在int80h读取调用之前保存ebx寄存器。;;openuptheinputfilemoveax,5;openfilesystemcallnumbermovebx,

c - initialize_main (&argc, &argv) 是做什么的?

我正在阅读coreutils源代码以学习linux下的编程。我发现在大多数程序中,如ls.c、cat.c,它们会在前几行调用宏函数initialize_main()。所以我查看了system.h以找到实现:/*Redirectionandwildcardingwhendonebytheutilityitself.Generallyanoop,butusedinparticularfornativeVMS.*/#ifndefinitialize_main#defineinitialize_main(ac,av)#endif不明白为什么要定义这样一个宏,也看不懂评论。

php - 已弃用的 session_is_registered 的替代方案

session_start();if(!session_is_registered(user)){header("Location:login.php");die();}由于session_is_registered()已弃用,正确的方法是什么? 最佳答案 使用if(isset($_SESSION['user'])){} 关于php-已弃用的session_is_registered的替代方案,我们在StackOverflow上找到一个类似的问题: https

php - 如何在 PHP 5.4 或更新版本中模拟 register_globals?

我正在开发一个使用register_globals的框架。我本地的php版本是5.4。我知道register_globals自PHP5.3.0起已弃用并在PHP5.4中删除,但我必须使此代码在PHP5.4上运行。有没有什么方法可以在较新版本的PHP上模拟功能? 最佳答案 您可以使用extract模拟register_globals在全局scope:extract($_REQUEST);或者使用global和variablevariables把它放到独立的函数中functionglobaling(){foreach($_REQUEST

php - 为什么 REGISTER_GLOBALS 这么糟糕?

我不是PHP开发人员,但我在一些地方看到人们似乎将其视为瘟疫之类的。为什么? 最佳答案 REGISTER_GLOBALS意味着所有通过GET或POST传递的变量都可以作为脚本中的全局变量。由于访问未声明的变量在PHP中不是错误(这是警告),因此它可能导致非常糟糕的情况。考虑一下,例如:这本身并不是一件坏事(精心设计的代码不应该产生警告,因此不应该访问任何可能未声明的变量(并且不应该需要REGISTER_GLOBALS出于同样的原因)),但是PHP代码通常[非常]低质量,导致这种安全漏洞。

php spl_autoload_register vs __autoload?

你好,除了我们可以使用自己的名字自动加载外,使用这个有什么不同吗?有什么性能差异吗?他们如何在内部运作?之间function__autoload_libraries($class){include_once'lib.'.$class.'.php';}spl_autoload_register('__autoload_libraries');对比function__autoload($class){include_once'lib.'.$class.'.php';} 最佳答案 __autoload通常被认为是过时的。它只允许一个自动加