#include#include #include #include #ifdef __GLIBC__ # include # include void print_mcheck_status(enum mcheck_status s) { printf("%s\n", (s == MCHECK_DISABLED) ? "N/A, you didn't enable mcheck()" : (s == MCHECK_OK) ? "No inconsistency detected" : (s == MCHECK_HEAD) ? "Memory preceding an allocated block was clobbered" : (s == MCHECK_TAIL) ? "Memory following an allocated block was clobbered" : (s == MCHECK_FREE) ? "A block of memory was freed twice" : "unknown memory check code!"); } void report_mcheck_fail(enum mcheck_status s) { printf("*** PROGRAM WOULD ABORT: "); print_mcheck_status(s); } #endif int main(int argc, char ** argv) { char buffer[1000]; while (1) { printf("> "); fgets(buffer, sizeof(buffer), stdin); char cmd[1000]; intptr_t arg1, arg2; int num = sscanf(buffer, "%s %"SCNiPTR" %"SCNiPTR, cmd, &arg1, &arg2); if (strcmp(cmd, "malloc") == 0) { void* result = malloc(arg1); printf("==> %p\n", result); } else if (strcmp(cmd, "free") == 0) { free((void*) arg1); printf("==> ok\n"); } else if (strcmp(cmd, "show") == 0) { if (num == 2) { arg2 = 1; } long * src = (long*) arg1; for (int i = 0; i < arg2; i++) { printf("%p: %#16.0lx\n", &src[i], src[i]); } #ifdef __GLIBC__ } else if (strcmp(cmd, "usable") == 0) { printf("usable size: %zu\n", malloc_usable_size((void*) arg1)); } else if (strcmp(cmd, "stats") == 0) { malloc_stats(); } else if (strcmp(cmd, "info") == 0) { malloc_info(0, stdout); } else if (strcmp(cmd, "mcheck") == 0) { printf("==> %s\n", mcheck(report_mcheck_fail) == 0 ? "OK" : "ERROR"); } else if (strcmp(cmd, "mcheck_pedantic") == 0) { printf("==> %s\n", mcheck_pedantic(report_mcheck_fail) == 0 ? "OK" : "ERROR"); } else if (strcmp(cmd, "mprobe") == 0) { if (num > 1) { print_mcheck_status(mprobe((void*) arg1)); } else { mcheck_check_all(); printf("==> check_all ok\n"); } #endif } else { puts("Commands: malloc n, free p, show p [n], usable p, stats, info, mprobe [p], mcheck, mcheck_pedantic"); } } }
malloc free test 용 코드였다.ㅠ
'시스템 > how2heap시리즈' 카테고리의 다른 글
++heap exploit house of prime,mind (0) | 2017.02.04 |
---|---|
[how2heap]overlapping chunks (0) | 2017.01.24 |
[how2heap정리]poison_null_byte (0) | 2017.01.20 |
[how2heap정리] house_of_lore - 이해안감 ㅠ (0) | 2017.01.17 |
[how2heap정리] house of einherjar (0) | 2017.01.15 |