Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <unistd.h>
- #include <string.h>
- void unescape(char *p, char *s) {
- int i, l = strlen(p), m = strlen(s);
- for (i = 0; i < m; ++i)
- switch(s[i]) {
- case '\\':
- p[l++] = '\\';
- p[l++] = '\\';
- break;
- case '\n':
- p[l++] = '\\';
- p[l++] = 'n';
- break;
- case '"':
- p[l++] = '\\';
- p[l++] = '"';
- break;
- default:
- p[l++] = s[i];
- }
- }
- int main(int argc, char **argv) {
- char before[] = "#include <unistd.h>\n#include <string.h>\n\nvoid unescape(char *p, char *s) {\n int i, l = strlen(p), m = strlen(s);\n for (i = 0; i < m; ++i)\n switch(s[i]) {\n case '\\\\':\n p[l++] = '\\\\';\n p[l++] = '\\\\';\n break;\n case '\\n':\n p[l++] = '\\\\';\n p[l++] = 'n';\n break;\n case '\"':\n p[l++] = '\\\\';\n p[l++] = '\"';\n break;\n default:\n p[l++] = s[i];\n }\n}\n\nint main(int argc, char **argv) {\n char before[] = \"";
- char s[] = " char PROG[] = \"echo\";\n char p[100000] = \"\";\n char *nv[4] = {argv[0], p, argv[1], NULL};\n strcat(p, before);\n unescape(p, before);\n strcat(p, \"\\\";\\n char s[] = \\\"\");\n unescape(p, s);\n strcat(p, \"\\\";\\n\");\n strcat(p, s);\n execvp(PROG, nv);\n}\n";
- char PROG[] = "echo";
- char p[100000] = "";
- char *nv[4] = {argv[0], p, argv[1], NULL};
- strcat(p, before);
- unescape(p, before);
- strcat(p, "\";\n char s[] = \"");
- unescape(p, s);
- strcat(p, "\";\n");
- strcat(p, s);
- execvp(PROG, nv);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement