Articles of exec

execle()也指定环境。 那是什么意思?

我正在读一本名为“黑客:剥削的艺术”的书,我碰到这一段: 使用execl(),将使用现有环境,但是如果使用execle(),则可以指定整个环境。 如果环境数组只是shellcode作为第一个string(带有一个用于终止列表的NULL指针),那么唯一的环境variables就是shellcode。 这使得它的地址易于计算。 在Linux中,地址将是0xbffffffa,减去环境中shellcode的长度,减去执行程序的名称长度。 由于这个地址是准确的,所以不需要NOP底座。 指定环境是什么意思? 什么分类不同的环境? 为什么用这种方式计算环境variables的地址(或者更具体地说为什么是基地址0xbffffffa)? 如果我使用execl()函数而不是execle()我可以不使用shellcode环境variables吗?

了解bash中的exec

在阅读了关于exec内build工程的解释之后,我明白它的基本function是replace当前进程而不分叉。 它似乎也被用于redirectI / O和在当前进程中closures文件描述符,这使我感到困惑。 这是一些无关的额外的事情exec吗? 在“取代现在的过程”的背景下能够理解吗? 而如何结合进程替代,如exec 3< <(my program) ?

任何想法,为什么我可以从命令行执行命令,但不是从PHP exec()

好, 我做了一些有创意的search,有点打路障。 我正在尝试使用Linux程序“sox”。 我正试图从我的PHP脚本中调用它。 如果我使用命令行,脚本可以工作。 但是,当我使用PHP的exec,它不起作用。 例: sox file1.mp3 file2.mp3 tempfile.mp3 -V3 (“V3”指定了详细的输出) 在命令行中以“用户X”或root身份执行时,可以创build新文件。 但是,当我执行命令为: <?php exec('sox file1.mp3 file2.mp3 tempfile.mp3 -V3', $output); foreach($output as $line){ print $line; } 它不会生成新的文件。 而且,应该返回该命令的结果的数组是空白的。 我已经做了一个简单的文字 exec(ls,$output); 我得到根目录的内容。 我使用了PHP命令get_current_user() ,它返回了作为网站根目录的所有者。 但是,当我使用linux命令whoami我发现它将当前的人视为“apache”。 我需要给apache使用该程序的权利吗? 我将继续在网上search,做试验和错误,试图弄清楚我做错了什么。 任何帮助表示赞赏。 澄清 我不是在安全模式(我检查了phpinfo()页面)

在C客户端服务器应用程序中,socket()返回0

我正在处理一个包含多个服务器套接字的应用程序,每个服务器套接字在一个独特的线程中运行 一个外部实用程序(脚本)由其中一个线程调用。 该脚本调用将消息发送到其中一个服务器套接字的实用程序(客户端)。 最初,我使用system()来执行这个外部脚本,但是我们不能使用它,因为我们必须确保服务器套接字在被分叉执行外部脚本的孩子中被closures。 我现在自己调用fork()和execvp() 。 我fork() ,然后在孩子我closures所有的服务器套接字,然后调用execvp()来执行脚本。 现在,所有这些工作正常。 问题是有时脚本会向服务器应用程序报告错误。 脚本通过调用另一个打开TCP套接字的应用程序(客户端)发送这些错误并发送相应的数据。 我的问题是客户端应用程序获取由socket()系统调用返回的值为0 。 注意:只有当使用我的forkExec()函数调用脚本/客户端应用程序时才会发生这种情况。 如果脚本/客户端应用程序被手动调用,那么socket()调用就会正常执行,而且事情工作正常。 基于这些信息,我怀疑这是在我的fork()execvp()代码下面的东西…任何想法? void forkExec() { int stat; stat = fork(); if (stat < 0) { printf("Error forking child: %s", strerror(errno)); } else if (stat == 0) { char *progArgs[3]; /* * First, close the file descriptors that the child * shouldn't […]

batik-rasterizer.jar – 将svg转换为png

我试着用下面的命令在我的linux服务器上设置一个导出服务器,把graphics下载为来自Highcharts的图像。 $command = "java -jar batik-rasterizer.jar -m image/png -d temp/1a6b5dd08ec607454b81f91097fb24a6.png temp/1a6b5dd08ec607454b81f91097fb24a6.svg 2>&1 "; $output = shell_exec($command); echo "Command: $command <br>"; echo "Output: $output"; 它在我的本地Windows机器完美创build一个图像,但我上传到我的Linux服务器,我收到错误。 About to transcode 1 SVG file(s) Converting 1a6b5dd08ec607454b81f91097fb24a6.svg to temp/1a6b5dd08ec607454b81f91097fb24a6.png … (.:21519): Gtk-WARNING **: cannot open display: 为什么会发生? 我注意到一个图像是用0 kb无效图像创build的 注意: 我也尝试了以下方法 。 1)包含batik-rasterizer.jar的文件夹,文件拥有者为root,权限设置为777。 2)我也试着用/ user / bin / java来执行它, 其中java […]

从Java运行linux脚本

我有以下的Java代码 ArrayList<String> argList = new ArrayList<>(); argList.add("Hello"); argList.add("World"); String[] args = argList.toArray(new String[argList.size()]); Process p =Runtime.getRuntime().exec("echo '$1 $2' ", args); 结果是$1 $2但是我想打印Hello World 。 有谁能够帮助我?

Java Runtime.getRuntime()。exec()带引号

我试图通过在Linux上的EXEC调用运行ffmpeg。 但是我必须在命令中使用引号(ffmpeg需要它)。 我一直在寻找通过java文档的processbuilder和执行和问题在stackoverflow,但我似乎无法find一个解决scheme。 我需要跑步 ffmpeg -i "rtmp://127.0.0.1/vod/sample start=1500 stop=24000" -re -vcodec copy -acodec copy -f flv rtmp://127.0.0.1/live/qltv 我需要在下面的参数string中插入引号。 注意,由于processbuilderparsing和运行命令的本质,简单地在反斜杠之前添加单引号或双引号不起作用。 String argument = "ffmpeg -i rtmp://127.0.0.1/vod/" + nextVideo.getFilename() + " start=" + nextVideo.getStart() + " stop=" + nextVideo.getStop() + " -re -vcodec copy -acodec copy -f flv rtmp://127.0.0.1/live/qltv"; 任何帮助将不胜感激。

fork-execpipe道redirect问题

有谁能告诉我这个代码有什么问题吗? 总之,它创buildinput和输出pipe道和fork–exec的sort程序。 父节点读取字典/usr/share/dict/words并将其写入到dup2() 'd的pipe道中,同样从中读取输出,并将其打印到terminal(标准父母的输出)。 或者至less,这就是应该发生的事情。 回溯表示父母挂在第130行的read() (标记为“XXX”注释)。 就好像sort没有意识到文件结束,但是closurespipeIn的写入结束应该“发出”这个信号,对吗? #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> int main(int argc, char** argv) { int pipeIn[2]; int pipeOut[2]; if ((pipe(pipeIn)) == -1) { perror("pipe"); exit(EXIT_FAILURE); } if ((pipe(pipeOut)) == -1) { perror("pipe"); exit(EXIT_FAILURE); } pid_t child = fork(); if […]

Java Runtime.exec在Linux上遇到困难

大家好。 我正在开发一个Java程序,用于Linux环境,创build一个运行另一个Java类的新Java程序,但是我遇到了麻烦。 我终于解决了所有的问题。 调用 Runtime.getRuntime().exec(new String[] { "/bin/bash", "-c", "'java -classpath /home/kevin/workspace/Misc/bin HelloWorld'" }) 在我的Java程序中返回 /bin/bash: /usr/lib/jvm/java-6-openjdk/jre/bin/java -classpath /home/kevin/workspace/Misc/bin HelloWorld: No such file or directory 在stdout / stderr中。 如果我尝试 Runtime.getRuntime().exec(new String[] { "/bin/bash -c 'java -classpath /home/kevin/workspace/Misc/bin HelloWorld'" }) 我得到一个Javaexception Cannot run program "/bin/bash -c 'java -classpath /home/kevin/workspace/Misc/bin HelloWorld'": java.io.IOException: error=2, No such file or […]

通过php“exec”挂载错误

我试图挂载一个iscsi虚拟磁盘,但是如果我通过php中的exec函数执行命令,给我这个错误: mount: special device /dev/sdf1 does not exist 。 但是,如果我直接在控制台中运行命令它运行良好! 我能做什么? 我很好地获得/dev/sdf1 ,它存在,但只能通过PHP不起作用。 谢谢 我使用sudo运行命令,并在控制台中运行它作为www-data用户总是与sudo ,所以,我想这是相同的环境。 sudo mount -t ext3 /dev/sdf1 /san_disks/RIBS_2 sudoers文件有这样几行: www-data ALL = (root) /usr/bin/iscsiadm, /bin/mount, /bin/umount %www-data ALL=NOPASSWD: ALL 它在控制台中工作。