leet.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #define _XOPEN_SOURCE 500
  2. #include <ctype.h>
  3. #include <inttypes.h>
  4. #include <limits.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <time.h>
  8. #include <unistd.h>
  9. #define COLOR(_n) (31 + (_n % 9))
  10. #define BUFSIZE 16
  11. void hexdump(uintmax_t address, size_t n, unsigned char buf[static n])
  12. {
  13. if (n > BUFSIZE) {
  14. n = BUFSIZE;
  15. }
  16. unsigned char ch = buf[n - 1];
  17. for (int c = 0; c < ch; c++) {
  18. buf[n - 1] = c;
  19. printf("\033[1m\r%015jx ", address);
  20. for (size_t i = 0; i < n; i++) {
  21. printf("\033[%hhdm%02hhx\033[0m ", COLOR(buf[i]), buf[i]);
  22. //usleep(100 * buf[i]);
  23. }
  24. for (size_t i = n; i < BUFSIZE; i++) {
  25. printf("-- ");
  26. }
  27. for (size_t i = 0; i < n; i++) {
  28. printf("\033[%hhdm%c\033[0m", COLOR(buf[i]), isprint(buf[i]) ? buf[i] : '.');
  29. usleep(100 * buf[i]);
  30. }
  31. for (size_t i = n; i < 16; i++) {
  32. printf(".");
  33. }
  34. }
  35. }
  36. int main(void)
  37. {
  38. setvbuf(stdout, NULL, _IONBF, 0);
  39. unsigned char buf[BUFSIZE];
  40. uintmax_t address = 0;
  41. srand(time(NULL));
  42. for (;;) {
  43. for (size_t i = 0; i <= sizeof(buf); i++) {
  44. buf[i] = rand();
  45. hexdump(address, i, buf);
  46. }
  47. printf("\n");
  48. address += sizeof(buf);
  49. }
  50. }