Skip to content

Commit 8499f2a

Browse files
authored
Merge pull request #192 from lafreuxpabo/master
Adding Features to malloc_playground remade
2 parents 2e1a62c + da02cb0 commit 8499f2a

File tree

1 file changed

+104
-17
lines changed

1 file changed

+104
-17
lines changed

malloc_playground.c

Lines changed: 104 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -21,38 +21,124 @@ void report_mcheck_fail(enum mcheck_status s)
2121
}
2222
#endif
2323

24-
int main(int argc, char ** argv) {
2524

26-
fprintf(stderr, "pid: %d\n", getpid());
25+
#define MAX_PTR_NUM 20;
26+
27+
char **ptrArray;
28+
29+
int main(int argc, char ** argv) {
30+
int num;
31+
int ptrNumber = -1;
32+
int maxPtr = MAX_PTR_NUM;
33+
int sizeArg;
34+
char sizeTable[maxPtr];
2735

2836
char buffer[1000];
37+
char cmd[1000];
38+
char arg1[100];
39+
char arg2[100];
40+
41+
memset(sizeTable, 0, maxPtr);
42+
memset(cmd, 0, 1000);
43+
memset(arg1, 0, 100);
44+
memset(arg2, 0, 100);
45+
46+
fprintf(stderr, "pid: %d\n", getpid());
47+
ptrArray = malloc(sizeof(char*) * 20);
48+
for (int i = 0; i < maxPtr; i++){
49+
ptrArray[i] = 0;
50+
}
2951
while (1) {
3052
fprintf(stderr, "> ");
3153
fgets(buffer, sizeof(buffer), stdin);
32-
char cmd[1000];
33-
intptr_t arg1, arg2;
34-
int num = sscanf(buffer, "%s %"SCNiPTR" %"SCNiPTR, cmd, &arg1, &arg2);
54+
num = sscanf(buffer, "%s %s %s\n", cmd, arg1, arg2);
3555
if (strcmp(cmd, "malloc") == 0) {
36-
void* result = malloc(arg1);
37-
fprintf(stderr, "==> %p\n", result);
56+
if (ptrNumber < maxPtr){
57+
sizeArg = atoi((const char *) &arg1);
58+
void *result = malloc(sizeArg);
59+
ptrNumber++;
60+
sizeTable[ptrNumber] = sizeArg;
61+
ptrArray[ptrNumber] = result;
62+
strcpy(result, "none");
63+
fprintf(stderr, "==> OK, %p\n", result);
64+
}
65+
else{
66+
printf("Max pointer reached, free or restart");
67+
}
3868
} else if (strcmp(cmd, "free") == 0) {
39-
free((void*) arg1);
40-
fprintf(stderr, "==> ok\n");
41-
} else if (strcmp(cmd, "show") == 0) {
42-
if (num == 2) {
43-
arg2 = 1;
69+
if (ptrNumber > -1){
70+
if (num == 1){
71+
free((void*) ptrArray[ptrNumber]);
72+
ptrArray[ptrNumber] = 0;
73+
sizeTable[ptrNumber] = 0;
74+
fprintf(stderr, "==> ok\n");
75+
ptrNumber -= 1;
76+
}
77+
else if (num == 2){
78+
int tmpArg = atoi((const char *) &arg1);
79+
ptrArray[tmpArg] = 0;
80+
sizeTable[tmpArg] = 0;
81+
free((void *) ptrArray[tmpArg]);
82+
ptrNumber -= 1;
83+
fprintf(stderr, "==> ok\n");
84+
}
85+
}
86+
else{
87+
fprintf(stderr, "==> list empty :/\n");
88+
89+
}
90+
} else if (strcmp(cmd, "write") == 0) {
91+
if (num == 1){
92+
printf("write: write value [pointer index]\n");
93+
}
94+
else if (num == 2){
95+
int len = strlen((const char *) &arg1);
96+
strcpy(ptrArray[ptrNumber], (const char *) &arg1);
97+
fprintf(stderr, "==> ok, wrote %s\n", ptrArray[ptrNumber]);
98+
}
99+
else if (num == 3){
100+
int len = strlen((const char *) &arg1);
101+
int tmpArg2 = atoi((const char *) &arg2);
102+
//if (tmpArg2 > ptrNumber){
103+
strcpy(ptrArray[tmpArg2], (const char *) &arg1);
104+
fprintf(stderr, "==> ok, wrote %s\n", ptrArray[tmpArg2]);
105+
//}
106+
//else{
107+
// printf("Invalid Index\n");
108+
//}
44109
}
45-
long * src = (long*) arg1;
46-
for (int i = 0; i < arg2; i++) {
47-
fprintf(stderr, "%p: %#16.0lx\n", &src[i], src[i]);
110+
} else if (strcmp(cmd, "listp") == 0) {
111+
printf("\n");
112+
for (int i = 0; i < 20; i++){
113+
if (ptrArray[i]){
114+
printf("%d - %p - %s - %d\n", i, ptrArray[i], ptrArray[i], sizeTable[i]);
115+
}
48116
}
117+
fprintf(stderr, "==> ok\n");
118+
} else if (strcmp(cmd, "listpall") == 0) {
119+
int tmpIndex = 0;
120+
printf("\n");
121+
for (int i=0; i < maxPtr; i++){
122+
printf("%d - %p - %s - %d\n", tmpIndex, ptrArray[tmpIndex], ptrArray[tmpIndex], sizeTable[i]);
123+
tmpIndex++;
124+
}
125+
fprintf(stderr, "==> ok\n");
126+
} else if (strcmp(cmd, "clearlist") == 0) {
127+
ptrNumber = -1;
128+
for (int i = 0; i < maxPtr; i++){
129+
free(ptrArray[i]);
130+
ptrArray[i] = 0;
131+
memset(sizeTable, 0, maxPtr);
132+
}
133+
fprintf(stderr, "==> ok, array cleared\n");
49134
#ifdef __GLIBC__
50135
} else if (strcmp(cmd, "usable") == 0) {
51136
fprintf(stderr, "usable size: %zu\n", malloc_usable_size((void*) arg1));
52137
} else if (strcmp(cmd, "stats") == 0) {
53138
malloc_stats();
54139
} else if (strcmp(cmd, "info") == 0) {
55140
malloc_info(0, stdout);
141+
printf("Ptrptr %d\n", ptrNumber);
56142
} else if (strcmp(cmd, "mcheck") == 0) {
57143
fprintf(stderr, "==> %s\n", mcheck(report_mcheck_fail) == 0 ? "OK" : "ERROR");
58144
} else if (strcmp(cmd, "mcheck_pedantic") == 0) {
@@ -66,7 +152,8 @@ int main(int argc, char ** argv) {
66152
}
67153
#endif
68154
} else {
69-
puts("Commands: malloc n, free p, show p [n], usable p, stats, info, mprobe [p], mcheck, mcheck_pedantic");
155+
puts("Commands: malloc n, free p, usable p, stats, info, mprobe [p], mcheck, mcheck_pedantic, ");
156+
puts("Commands: [BETA] write str, listp, listpall, clearlist\n");
70157
}
71158
}
72-
}
159+
}

0 commit comments

Comments
 (0)