在C编程语言中,对于execve:
params = {
profile_id: profile.id,
track_id: track.id,
format: :js
}
post :create, params
我们如何使用envp进行开发?
其次,当通过envp传递值时,我们是否需要使用NULL终止它?
最后,envp放在堆栈的哪个位置?
提前致谢!
答案 0 :(得分:0)
Linux上的Shellcode倾向于使用系统调用来执行。你是否想过ret2libc?你的问题是混合使用c代码和shellcode,而且不清楚你在问什么。
答案 1 :(得分:0)
此示例可帮助您了解execve()argv和envp
的用法$ cat a.sh
#!/bin/sh
echo "value of PWDIR is $PWDIR"
echo "first arg = $1"
echo "second arg = $2"
printenv
/ * execve.c * /
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
char *newargv[] = { NULL, "hello", "world", NULL };
char *newenviron[] = {"PWDIR=/home/root" };
if (argc != 2) {
fprintf(stderr, "Usage: %s <file-to-exec>\n", argv[0]);
exit(EXIT_FAILURE);
}
newargv[0] = argv[1];
execve(argv[1], newargv, newenviron);
perror("execve"); /* execve() only returns on error */
exit(EXIT_FAILURE);
}
编译代码
$ cc execve.c -o execve
执行代码和输出如下
$ ./execve a.sh
value of PWDIR is /home/root
first arg = hello
second arg = world
PWDIR=/home/root
PWD=/home/arul/work/images/samples
在execve中传递的环境变量用于shell脚本。 另请注意,执行脚本时,将在此处生成单独的shell。