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> | ||