Let's say I have two programs - input.c and output.c All I want to do is send some payload / characters in half-pyramid format to another using the execl () function.
input.c
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <sys/wait.h> #define SIZE 1024 int length; int main(int argc, char *argv[]) { pid_t pid; char *target; //char payload[length+1]; char payload[SIZE + 1]; int status; int i = 0; if(argc < 2) { printf("Usage %s <length> <target>\n", argv[0]); exit(EXIT_FAILURE); } length = atoi(argv[1]); target = argv[2]; while(i < length) { pid = fork(); if(pid != 0) { waitpid(-1, &status, 0); //exit(0); } if(pid == 0) { payload[i] = 'A'; payload[i + 1] = '\0'; execl(target, target, payload, NULL); //printf("%s\n", payload); } ++i; } return 0; }
Commented passages are for debugging purposes only. Because, as you can see (when trying), when you just want to print it, everything works correctly.
output.c (or if you want "target.c")
#include <stdio.h> #include <string.h> int main(int argc, char *argv[]) { char buffer[30]; strncpy(buffer, argv[1], sizeof(buffer)); printf("Output: %s\n", buffer); return 0; }
When I compile input.c as:
gcc input.c -o input
& output.c:
gcc output.c -o output
Ok Now everything is ready. Say I would like to send a payload of length 6
./input 6 ./output
but all I get in the output is simple (or just with other junks characters):
Output: A Output: 0A Output: 0,A Output: 0, A Output: 0, 8A Output: 0, 8 A
I tried so many things, but they were all unsuccessful, and the output was the same as you can see above.
I would be very grateful if anyone could help me and maybe show me where the problem is. Could it be a problem when sharing fork () and execl ()?