首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我的execve()只有在参数包含/bin/时才有效?

execve()是一个系统调用函数,用于在Linux系统中执行一个新的程序。它的原型如下:

代码语言:txt
复制
int execve(const char *filename, char *const argv[], char *const envp[]);

其中,filename参数是要执行的程序的路径,argv参数是一个字符串数组,包含了要传递给新程序的命令行参数,envp参数是一个字符串数组,包含了新程序的环境变量。

根据你的描述,你的execve()函数只在参数包含"/bin/"时才有效。这是因为在Linux系统中,"/bin/"目录下存放了许多系统命令和可执行文件。当你在execve()函数中指定的路径不包含"/bin/"时,系统无法找到要执行的程序,因此execve()函数调用失败。

举个例子,如果你想执行一个名为"myprogram"的程序,而该程序位于"/home/user/myprogram"目录下,你可以这样调用execve()函数:

代码语言:txt
复制
char *args[] = {"myprogram", NULL};
char *env[] = {NULL};
execve("/home/user/myprogram", args, env);

在这个例子中,execve()函数会执行"/home/user/myprogram"路径下的"myprogram"程序。

需要注意的是,execve()函数的参数是一个字符串数组,最后一个元素必须为NULL,以表示参数列表的结束。

至于腾讯云的相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,我无法给出相关链接。但你可以通过访问腾讯云官方网站,查找他们的云计算产品和相关文档。

相关搜索:我不明白为什么"start-job“只有在我输入”接收-job“时才开始。为什么我的firebase聊天只有在我退出屏幕或关闭聊天并重新打开时才显示消息?为什么我的GTK CSS按钮颜色只有在我的应用程序未被选中时才起作用?当我包含参数时,为什么我的抓取不会完成?为什么我的计时器只在达到1时才更新为什么我的会话在包含刷新令牌时为空?我希望UITableViewCell中的UItextField只有在单元格触摸时才成为第一响应者我的游戏角色只有当鼠标在屏幕上移动时才移动,而它需要鼠标为什么我的函数只有在只使用三元运算符而不是常规的if/else语句时才起作用?为什么我的C# Xml代码只有在枚举变量enumerable时才能工作为什么我的clear按钮只在验证为真时才清除文本框?我希望只有在模板的输入中存在变量名时才执行request.POST[变量名我的代码只有在输入低于31时才有效[ProjectEuler100]问题#10-素数求和为什么我的程序在运行时没有在函数的括号中包含参数?为什么我的查询参数在使用useRouter时不存在?nextjs为什么带pool.query的POST请求只有在URL中间使用:id时才间歇性地起作用?css样式表只有在我使用外部CSS而不是一般的<style>时才有效。为什么我在将commad line image文件中的参数集作为参数传递时出现错误为什么我的正则表达式在RegexPal中有效,但在我运行Javascript时却没有?为什么我的函数使用原始列表,而不是我在调用该函数时用于参数的副本?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++核心准则R.30: 只有包含明确生命周期语义使用智能指针作参数

R.30: Take smart pointers as parameters only to explicitly express lifetime semantics R.30: 只有包含明确生命周期语义使用智能指针作参数...如果一个函数只是需要一个部件本身,接受一个智能指针作参数是错误。它应该可以接受所有部件对象,而不只是一个生命周期被按照特定方法管理对象。不需要管理生命周期函数应该使用原始指针和引用。...(简单)如果一个函数使用了可拷贝(重载了操作符->和操作符*)智能指针类型参数但是只是调用了运算符*、->或者get(),发出警告并建议使用T*或者T&。...标记定义了(重载了操作符->和操作符*)可拷贝/可移动智能指针类型参数,但在函数体中却从未使用拷贝和移动功能,指针从未被修改也没有交给一个会那么做函数情况。那意味着所有权语义根本没有被使用。

58620

Linux Capabilities 入门:如何管理文件 capabilities?

可以包含多个分组,每一个分组表示形式为 capability[,capability…]+(e|i|p),其中 e 表示 effective,i 表示 inheritable,p 表示 permitted...Securebits : 也没搞清楚这是个什么鬼。 这个命令输出信息比较有限,完整信息可以查看 /proc 文件系统,比如当前 shell 进程就可以查看 /proc/$$/status。...至于 no_new_privs究竟是干嘛,下面单独解释一下。...为了解决这个问题,Linux 内核从 3.5 版本开始,引入了 no_new_privs 属性(实际上就是一个 bit,可以开启和关闭),提供给进程一种能够 execve() 调用整个阶段都能持续有效且安全方法...$(pgrep nginx) 这里你会看到只有主线程才有 capabilities,子线程和其他 workers 都没有 capabilities,这是因为只有 master 需要特殊权限,例如监听网络端口

4.3K10
  • 无命令反弹shell-逃逸基于execve命令监控(上)

    应用程序调用系统调用和系统调用返回都会经过 kauditd ,kauditd 会将这些事件记录下来并通过 Netlink 回传给用户态进程。 用户态进程解析事件日志并输出。...方法很简单,就是不使用execve系统调用。(不是废话) 大家想想为什么会有反弹shell? 为什么要弹shell?...大体操作流程如下: 第一步:首先我们fork出来一个子进程,然后子进程中先调用ptrace,接着执行execve("ls xxxxxx"),这个时候基于execve监控到就是一个假参数。...四.新方法-无"命令"反弹shell 已知绕过方法中,通过shellcode方式绕过内核态execve监控,算是相对优雅方式了,比较喜欢这种,但是这种方式又太麻烦,linux命令我都要重写成...其实需求很简单: 既想要linux命令原有的功能,又不想用execve syscall方式启动。 想了想,为什么不能将linux 命令直接当成shellcode来执行呢?

    1.6K20

    Linux进程控制【进程程序替换】

    -1 参数1:待替换程序路径,如 /usr/bin/ls 参数2:待替换程序名及其命名构成 指针数组,相当于一张表 注意: 虽然 execv 只需传递两个参数,但在创建 argv 表,最后一个元素仍然要为.../other/CPP", NULL, environ); //继承环境变量表 结论: 如果主动传入环境变量后,待替换程序中原环境变量表将被覆盖 现在可以理解为什么 bash 中创建程序并运行,...,供 execve 参数2使用 execlp 相当于 PATH 中找到目标路径信息后,传给 execve 参数1使用 execle envp 最终也是传给 execve参数3 #include...,触发 写拷贝 机制,令子进程读取另一块区域数据 写拷贝 只读数据区也能触发,因为不能影响到父进程 ---- 总结 以上就是本篇关于 Linux 进程程序替换相关内容了,本文中,我们知道了进行程序替换目的...,期待留下一个小小赞,你支持是分享最大动力!

    24820

    反弹shell-逃逸基于execve命令监控(上)

    应用程序调用系统调用和系统调用返回都会经过 kauditd ,kauditd 会将这些事件记录下来并通过 Netlink 回传给用户态进程。 用户态进程解析事件日志并输出。...char **, 如果/bin/sh有其它参数的话,整个程序写法就又不一样了 lea edx, [esi+12] # 最后是null地址,注意,是null地址,不是null...方法很简单,就是不使用execve系统调用。(不是废话) 大家想想为什么会有反弹shell? 为什么要弹shell?...大体操作流程如下: 第一步:首先我们fork出来一个子进程,然后子进程中先调用ptrace,接着执行execve("ls xxxxxx"),这个时候基于execve监控到就是一个假参数。...四.新方法-无"命令"反弹shell 已知绕过方法中,通过shellcode方式绕过内核态execve监控,算是相对优雅方式了,比较喜欢这种,但是这种方式又太麻烦,linux命令我都要重写成

    3.1K20

    无需 sendmail:巧用 LD_PRELOAD 突破 disable_functions

    半月前逛“已黑网站列表”复审一小电商网站,“列表”中并未告知漏洞详情,简单浏览了下功能,只有注册、登录、下单、支付等几个而已。登录接口中,找到个 RCE(远程代码执行,非远程命令执行)漏洞: ?...,想法 c.so 前优先加载可控 c_evil.so,c_evil.so 内含与 b() 同名恶意函数,由于 c_evil.so 优先级较高,所以,a.bin 将调用到 c_evil.so 内...找寻内部启动新进程 PHP 函数。虽然 LD_PRELOAD 为提供了劫持系统函数能力,但前提是得控制 php 启动外部程序行(只要有进程启动行为即可,无所谓是谁)。...go.bin 实现,那么, php 脚本中调用了函数 goForward(),势必启动外部程序 go.bin。...一是 cmd 参数,待执行系统命令(如 pwd);二是 outpath 参数,保存命令执行输出结果文件路径(如 /tmp/xx),便于页面上显示,另外关于该参数,你应注意 web 是否有读写权限、

    2K10

    缓冲区溢出 攻击 「建议收藏」

    下面的指令描述了如何设置 zsh 程序: 这里知道Tab可以补全qaq困惑了好久 GCC编译器有一种栈保护机制来阻止缓冲区溢出,所以我们在编译代码需要用 –fno-stack-protector...缓冲区溢出,简单说就是计算机对接收输入数据没有进行有效检测(理想情况是程序检查数据长度并不允许输入超过缓冲区长度字符),向缓冲区内填充数据超过了缓冲区本身容量,而导致数据溢出到被分配空间之外内存空间...但是缓冲区溢出攻击,也可以将整个触发缓冲区溢出攻击过程代码统称为shellcode,按照这种定义可以把shellcode分为四部分: 1、核心shellcode代码,包含了攻击者要执行所有代码..."/bin/sh"; name[1] = NULL; execve(name[0], name, NULL); _exit(0); } shellcode.c...按照前面刚刚讲过系统调用规则,Linux下生成一个shell并结束退出需要以下步骤: 在内存中存放一个以’\0’结束字符串”/bin/sh”; 将字符串”/bin/sh”地址保存在内存中某个机器字中

    1.2K30

    从一道 CTF 题看 SROP | PWN

    SROP 学习过程中,很大一部分人写 smallest 这道题 writeup 让感觉很疑惑,为了证明他们写存在一定问题,被迫走上了 pwntools + gdb 调试路,所以这次只能用视频来进行展示了...除了rcx、r11和rax,其他寄存器都被保留。系统调用编号必须在寄存器rax中传递。系统调用参数限制为6个,不直接从堆栈上传递任何参数。...返回,rax中包含了系统调用结果,而且只有INTEGER或者MEMORY类型值才会被传递给内核。 用户接口 x86-64下通过寄存器传递参数,这样做比通过栈具有更高效率。...它避免了内存中参数存取和额外指令。根据参数类型不同,会使用寄存器或传参方式。如果参数类型是MEMORY,则在栈上传递参数。...所以如果有多于6个INTEGER参数,则后面的参数栈上传递。

    97820

    ROP-Ret2csu详解

    利用原理 当在x64环境下函数参数传递凑不齐类似“pop rdi;ret”/“pop rsi;ret”/“pop rdx;ret”等3个传参gadgets,就可以考虑使用_libc_csu_init... 利用_libc_csu_init函数中两个代码片段来实现这三个参数传递 确定gadget1、gadget2地址 由于程序中vul函数并未执行过,而call函数用法是跳转到某地址内所保存地址...,三次溢出] 点击下载-提取码:bpiv 思路 确定csu函数中r13、r14、r15顺序 参数 正序即可 利用csu_gadgets泄露write函数真实地址,并返回至主函数 通用gadgets...+ libc.symbols['execve'] 再次利用csu_gadgets将execve函数地址及‘/bin/sh’写入到程序bss段 csu(read_addr,0,bss_addr,16,main_addr...("Hello, World\n") #gdb.attach(sh) sh.send(p64(execve_addr)+'/bin/sh\x00') #发送execve地址加上/bin/sh到bss段

    1.7K20

    两个主题:躲避execve与分析proc目录

    躲避execve,是原来文章基础上补充一个小思路,分析/proc/目录 是为了下一篇讲解内存中修改函数做准备,要让大家提前知道这回事。...躲避execve小思路 之前文章中,讲解过各种躲避execve监控方法,如果有朋友没看到过,可以点下面文章链接熟悉一下: 无"命令"反弹shell-逃逸基于execve命令监控(上) linux...下面来说一下,这种方式按猜想该怎么监控: 复制一份bash,bashMD5是不会变安全基线中有进程文件哈希库:一个名字不是bash文件哈希 和bash一样,你觉得可不可疑呢?...,只有内核编译打开了 CONFIG_STACKTRACE编译选项,才会生成这个文件。...如果当前进程虽然阻塞,但阻塞函数并不是系统调用,则系统调用号值为 -1,后面只有堆栈指针和指令计数器值。如果进程没有阻塞,则这个文件只有一个“ running”字符串。

    1.6K30

    Linux-Copy On Write写复制机制初探

    系统调用execve()对当前进程进行替换,替换者为一个指定程序,其参数包括文件名(filename)、参数列表(argv)以及环境变量(envp)。...---- 为什么有了COW? 早期 Unix 实现 fork 系统调用时,并没有使用该技术,创建新进程开销很大。...现在Linuxfork()使用写拷贝页来实现新进程创建,它是一种可推迟甚至避免数据拷贝技术,刚开始内核并不会复制整个地址空间,而是让父子进程共享地址空间,只有复制地址空间,使得父子进程都拥有独立地址空间...,即资源复制是只有需要写入时才会发生,因此而称之为Copy on Write(COW)。...,也就是说只有当进程空间中各段内存内容发生变化时,父进程将其内容复制一份传给子进程,大大提高了效率。

    3.4K10

    操作系统·进程

    系统对前台作业按照时间片轮转法进行调度,仅当前台无作业把处理机分配给后台作业进程。...圆桌上有五个碗和五支筷子,平时一个哲学家进行思考,饥饿便试图取用其左、右最靠近他筷子,只有在他拿到两支筷子时才能进餐。进餐毕,放下筷子继续思考。...解决办法: 觉得解决方法已经不重要了,为什么不先反问一句:为什么会出现这种状况?这不应该是设计方面应该考虑问题吗?...PATH变量查找子程序文件 e 函数传递指定参数envp,允许改变子进程环境,无后缀e,子进程使用当前程序环境 下面找到一些通俗易懂栗子,算是让明白了一点: #ifdef HAVE_CONFIG_H...,适合包含vexec函数参数 char *arg[] = {"ls", "-a", NULL}; /** * 创建子进程并调用函数execl * execl 中希望接收以逗号分隔参数列表

    91220

    Linux Capabilities 入门:让普通进程获得 root 洪荒之力

    作为普通用户,如果想执行某些只有管理员才有权限操作,以前只有两种办法:一是通过 sudo 提升权限,如果用户很多,配置管理和权限控制会很麻烦;二是通过 SUID(Set User ID on execution...这样一来,权限检查过程就变成了:执行特权操作,如果线程有效身份不是 root,就去检查其是否具有该特权操作所对应 capabilities,并以此为依据,决定是否可以执行特权操作。...现在不知道为什么也没关系,后面会通过具体公式来告诉你。...举个例子,一个 Bash 环境中(例如某个正在执行脚本),该环境所在线程 Ambient 集合中包含 CAP_NET_RAW capability,那么该环境中执行 ping 文件可以正常工作...虽然 Kubernetes 官方不支持,但我们可以自己来实现,具体实现方式可以关注后续文章。

    9.2K21

    CVE-2021-4034 pkexec本地提权漏洞

    所以程序编写时候有一个读取argv参数for循环是根据argc来进行参数获取。..., 默认情况下无参数argc = 1 , 同时argc 也是argv数组大小范围。...但是当我们程序中使用execve()执行pkexec如果传入args参数和environ参数均为数组为{NULL}, 那么就会导致pkexe内argc参数值为0。..., 可以看到后面接着是envp变量数组, 这个数组就是我们上面提到execve函数第二个参数environ , 这个是环境变量参数, 使用execve运行pkexeenvp[0]值为pwnkit.so...测试可以本地设置一个文件为具有suid可执行文件file1用于输出全部环境变量, 然后再创建一个可执行文件file用来通过execve执行具有suid权限file1, 并且将execve函数第三个参数

    89220

    Linux进程控制

    (守护进程):Linux启动启动进程,并在后台运行 进程控制块 Linux中,每个进程创建都会被分配一个数据结构,称为进程控制块(PCB, Process Control Block),描述进程运动变化过程...pid = fork();之前,只有一个进程执行代码,但在该语句之后,有两个进程执行之后代码,根据pid不同执行不同语句。...实际上,只有execve()函数才是真正意义上系统调用,其它都是在此基础上经过包装库函数。...参数status用于保存进程退出一些状态,如果只是想把进程灭掉,可以设置该参数为NULL。 参数pid用于指定所等待线程。...: 宏定义 含义 WIFEXITED(status) 子进程正常退出,返回一个非零值,否则返回零 WEXITSTATUS(status) 当WIFEXITED为真,此宏可用,返回该进程退出代码

    2K30

    linux系统编程之进程(三):exec系列函数和system函数

    execv、execvp和execvpe第二个参数是一个字符串数组,新程序启动时会把argv数组中给定参数传递到main 名字含字母“p”函数会搜索PATH环境变量去查找新程序可执行文件...如果可执行程序文件存在SUID和SGID位的话,那么有效用户ID和组ID(euid, egid)会发生变化 程序启动时候,所有的信号处理方式都是默认。...我们前面讲到fcntl 函数未讲到当cmd参数取F_SETFD情形,即设置文件描述符标志,现结合exec系列函数讲解如下: /*********************************...; // 带l为可变参数     //  execvp("ls", args); //args数组参数传递给main     //  execv("/bin/ls", args);     int ret...* 即在执行execve将标准输出文件描述符关闭,      * 即下面替换pid_env程序不会在屏幕上输出信息      */     //  if (ret == -1)     //

    2.2K60

    审计 Linux 系统操作行为 5 种方案对比

    目前大部分系统执行命令都通过 execv,execve 系统调用执行,这点就和会话无关,几乎所有的情况下,只要通过这两个系统调用执行命令,就会将操作行为记录下来,从目前最新版本(2.4.8)来看,snoopy.../uptime username:root]: uptime -p 上述日志显示 root 用户执行了uptime命令,参数包含 -p对应进程上下文信息都比较全,不过 snoopy 缺点也比较明显...,主要包含以下几点: 仅支持 execv,execve 相关系统调用操作; 不设置规则可能产生日志过多,对日志搜集系统造成很大负担; 暂不支持过滤敏感信息规则;实际使用中,snoopy 记录方式可以很详细记录所有的命令操作信息...其主要几个工具包含如下: auditd 策略规则主要根据 -a 或 -w 参数设置,可以将策略规则保存到默认 /etc/audit/rules.d/audit.rules 配置,也可以通过 auditctl...值得注意是,eBPF 仅适用于 Linux 4.1+ 版本,以 eBPF 开发进度来看,eBPF kernel-4.10 之后支持相对全面,线上使用时候尽量选择较高内核版本发行版(

    1.7K20

    Linux系统-进程控制

    拷贝 概念: fork成功之后父子代码共享,当父子不写入数据,数据也是共享,当任意一方试图写入,便以写拷贝方式各自一份副本 为什么数据要进行写拷贝: 进程具有独立性,多进程运行...: 只有main函数return算是终止进程,其他函数return只是结束函数,因为系统调用是main函数,main函数返回才是进程返回 调用main函数运行结束后,main函数...) 注:status不能简单的当作整形来看待,可以当作位图来看待(只有status低16比特位有有效信息) 示图: 注意: 如果是正常退出,我们可以进一步获取子进程退出退出码(退出状态.../ls",MY_acgv); //注:v表示数组形式传入参数列表 execvp("ls",MY_acgv); execve("/user/bin/ls",MY_acgv,env); 示例:替换程序为...execve是真正系统调用,其它五个函数最终都调用execve系统调用上一个封装),所以execveman手册 第2节,其它函数man手册第3节 示图: 注:对于软件或者程序执行,要预先将存在磁盘里软件或者程序加载到

    1.5K30

    缓冲区溢出攻击初学者手册(更新版)

    这就是帧指针概念,允许函数使用自己偏移地址,在对付攻击就变很无趣了。因为函数将不会返回到原有的执行线程。 我们只需要知道栈是什么样顶部,我们有函数内部缓冲区和函数变量。...4a 使代码可移植 传统方式中,我们必须应用一个策略在内存中完成没有指导参数Shellcode,通过给予它们页存储上精确位置,这只能在编译中完成。...一旦我们估计了shellcode大小,我们能够使用指令jmp和call执行线程向前或向后到达指定字节。为什么使用call?...() (gdb) info register esp esp: 0xbffff574 -1073744524 那么,故障时间栈顶,安全假设是我们能够使用这作为我们shellcode返回地址...写入服务器就变更加值得关注,任何类型安全程序,或是suid root程序,或是设计时使用root来运行,如特别的账户或是系统本身。

    1.4K90
    领券