#include #include #include #include typedef struct ms { char b; char *s; int i; } Mystruct; char buf[100]; char *ctos(char b) { if (b == 0) {sprintf(buf, "'\\0'"); return buf; } if (b == '\n') {sprintf(buf, "'\\n'"); return buf; } if (b <= 'Z' && b >= 'A') {sprintf(buf, "'%c'", b); return buf; } if (b <= 'z' && b >= 'a') {sprintf(buf, "'%c'", b); return buf; } if (b <= '9' && b >= '0') {sprintf(buf, "'%c'", b); return buf; } if (strchr(".,>b); printf("1: '%s'\n", q->s); printf("2: %d\n", q->i); q += 3; printf("3: %c\n", q->b); printf("4: '%s'\n", q->s); printf("5: %d\n", q->i); b = a + 16; q = (Mystruct *) b; printf("6: '%s'\n", q->s); printf("7: %d\n", q->i); q = (Mystruct *) a; q = (Mystruct *) q->s; printf("8: %c\n", q->b); printf("9: %c\n", q[1].b); return; } int main(int argc, char **argv) { int i, j; void *a; char *ac; int *ip; size_t len; int *pointers[7]; char *chars[9]; len = 256*256*256; srand(426); a = mmap((void *) 0x61610000, len, PROT_READ | PROT_WRITE, MAP_ANON | MAP_FIXED | MAP_PRIVATE, -1, 0); if (a == MAP_FAILED) { perror("mmap"); exit(1); } ac = (char *) 0x61696f40; ip = (int *) ac; j = 0; pointers[0] = ip+1; pointers[1] = ip+4; pointers[2] = ip+5; pointers[3] = ip+7; pointers[4] = ip+9; pointers[5] = ip+10; pointers[6] = ip+13; chars[0] = (char *) (ip); chars[1] = (char *) (ip+2); chars[2] = (char *) (ip+3); chars[3] = (char *) (ip+6); chars[4] = (char *) (ip+8); chars[5] = (char *) (ip+11); chars[6] = (char *) (ip+12); chars[7] = (char *) (ip+14); chars[8] = (char *) (ip+15); for (i = 0; i < 7; i++) pointers[i][0] = (int) (ac + rand()%64); for (i = 0; i < 9; i++) { for (j = 0; j < 4; j++) { chars[i][j] = rand()%26 + 'a'; if (rand()%3 == 0) if (i != 2 || j != 0) chars[i][j] = 0; } } printmemory(ac, 16); printf("\n"); pm(ac); }