Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
hackingweek_2014:exploit:exploit5 [2014/03/03 01:57] ganapati créée |
hackingweek_2014:exploit:exploit5 [2017/04/09 15:33] (Version actuelle) |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
Source : | Source : | ||
- | + | <code C> | |
- | #include <stdio.h> | + | #include <stdio.h> |
- | #include <stdlib.h> | + | #include <stdlib.h> |
- | #include <string.h> | + | #include <string.h> |
- | #include <unistd.h> | + | #include <unistd.h> |
- | #include <libgen.h> | + | #include <libgen.h> |
- | #include <sys/types.h> | + | #include <sys/types.h> |
- | char *program; | + | char *program; |
- | struct task { | + | struct task { |
- | int priority; | + | int priority; |
- | char *name; | + | char *name; |
- | }; | + | }; |
- | void foo() { | + | void foo() { |
- | system("/bin/sh"); | + | system("/bin/sh"); |
- | exit(EXIT_SUCCESS); | + | exit(EXIT_SUCCESS); |
+ | } | ||
+ | struct task *task_alloc() { | ||
+ | struct task *task = malloc(sizeof(struct task)); | ||
+ | if (!task) { | ||
+ | fprintf(stderr, "%s: error: out of memory\n", program); | ||
+ | exit(EXIT_FAILURE); | ||
} | } | ||
- | struct task *task_alloc() { | + | task->name = malloc(8 * sizeof(char)); |
- | struct task *task = malloc(sizeof(struct task)); | + | if (!task->name) { |
- | if (!task) { | + | fprintf(stderr, "%s: error: out of memory\n", program); |
- | fprintf(stderr, "%s: error: out of memory\n", program); | + | exit(EXIT_FAILURE); |
- | exit(EXIT_FAILURE); | + | |
- | } | + | |
- | task->name = malloc(8 * sizeof(char)); | + | |
- | if (!task->name) { | + | |
- | fprintf(stderr, "%s: error: out of memory\n", program); | + | |
- | exit(EXIT_FAILURE); | + | |
- | } | + | |
- | return task; | + | |
} | } | ||
- | void task_free(struct task *task) { | + | return task; |
- | free(task->name); | + | } |
- | free(task); | + | void task_free(struct task *task) { |
+ | free(task->name); | ||
+ | free(task); | ||
+ | } | ||
+ | void task_write(struct task *task, int priority, char* name) { | ||
+ | task->priority = priority; | ||
+ | strcpy(task->name, name); | ||
+ | } | ||
+ | int main(int argc, char **argv) { | ||
+ | struct task* t[2]; | ||
+ | program = basename(argv[0]); | ||
+ | if (argc < 3) { | ||
+ | fprintf(stderr, "%s: error: missing argument(s)\n", program); | ||
+ | exit(EXIT_FAILURE); | ||
} | } | ||
- | void task_write(struct task *task, int priority, char* name) { | + | t[0] = task_alloc(); |
- | task->priority = priority; | + | t[1] = task_alloc(); |
- | strcpy(task->name, name); | + | task_write(t[0], 1, argv[1]); |
- | } | + | task_write(t[1], 2, argv[2]); |
- | int main(int argc, char **argv) { | + | fprintf(stdout, "Tasks\n=====\n"); |
- | struct task* t[2]; | + | for (int i=0; i<2; i++) { |
- | program = basename(argv[0]); | + | fprintf(stdout, "Task(%d)\n", i); |
- | if (argc < 3) { | + | fprintf(stdout, "priority: %d\n", t[i]->priority); |
- | fprintf(stderr, "%s: error: missing argument(s)\n", program); | + | fprintf(stdout, "name: %s\n\n", t[i]->name); |
- | exit(EXIT_FAILURE); | + | |
- | } | + | |
- | t[0] = task_alloc(); | + | |
- | t[1] = task_alloc(); | + | |
- | task_write(t[0], 1, argv[1]); | + | |
- | task_write(t[1], 2, argv[2]); | + | |
- | fprintf(stdout, "Tasks\n=====\n"); | + | |
- | for (int i=0; i<2; i++) { | + | |
- | fprintf(stdout, "Task(%d)\n", i); | + | |
- | fprintf(stdout, "priority: %d\n", t[i]->priority); | + | |
- | fprintf(stdout, "name: %s\n\n", t[i]->name); | + | |
- | } | + | |
- | task_free(t[0]); | + | |
- | task_free(t[1]); | + | |
- | return EXIT_SUCCESS; | + | |
} | } | ||
+ | task_free(t[0]); | ||
+ | task_free(t[1]); | ||
+ | return EXIT_SUCCESS; | ||
+ | } | ||
+ | </code> |