Advertisement
GodlyPacketz

[C] 1 lib embedded memory based STRSTR

Jul 14th, 2023
1,002
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.09 KB | Source Code | 0 0
  1. #include <stdio.h>
  2. #include <stdint.h>
  3.  
  4. #ifdef _32BIT
  5.         typedef uint32_t SYSADDR_INT;
  6. #else
  7.         typedef uint64_t SYSADDR_INT;
  8. #endif
  9. void utils_init(void);
  10. void util_zero(void *ptr, size_t size);
  11. uint32_t util_len(unsigned char c, size_t ptrsz, void *ptr);// length until delim
  12. size_t util_cpy(void *ptr, void *src, size_t len);//return same as paramater size_t
  13. unsigned char *util_strstr(size_t ptrsz, void *ptr, void *find);// return ptr + start of first void*find occurance
  14.  
  15. void utils_init(void)
  16. {
  17.  
  18. }
  19. void util_zero(void *ptr, size_t size)
  20. {
  21.  
  22. }
  23.  
  24. uint32_t util_len(unsigned char c, size_t ptrsz, void *ptr)// length until delim
  25. {
  26.  
  27. }
  28. size_t util_cpy(void *ptr, void *src, size_t len)//return same as paramater size_t
  29. {
  30.  
  31. }
  32.  
  33. // this function is internal dependant...
  34. // may produde errors
  35. SYSADDR_INT util_p_get_ptr_addr(void *ptr)
  36. {
  37.         {
  38.         return (SYSADDR_INT)ptr+0;
  39.         }
  40. }
  41.  
  42. ///////////////////////////////FROM////////////////////
  43. SYSADDR_INT util_p_sizeptr(void *ptr, void *comp)
  44. {
  45.         return (SYSADDR_INT)(comp-ptr);
  46. }
  47. //////////////////////////////FROM/////////////////////
  48. void *util_p_jumpptr(void *ptr, size_t j)
  49. {
  50.         return (ptr != NULL ? (((unsigned char *)ptr)+j) : NULL);// old shellshock vuln... im bored doe
  51. }
  52.  
  53. //REMEBER TO NULL TERMINATE & initalize
  54. unsigned char *util_strstr(size_t fptrsz, void *ptr, void *ptrf)
  55. {
  56.     void *tmpptr = NULL;
  57.     unsigned char *buf = (unsigned char *)util_p_jumpptr(ptr, 0);
  58.     unsigned char *find = (unsigned char *)util_p_jumpptr(ptrf, 0);
  59.     SYSADDR_INT bufpz = 0, findpz = 0;
  60.  
  61.     while (*buf != 0x00)
  62.     {
  63.         if (*find == *buf)
  64.         {
  65.             tmpptr = find;
  66.             find = util_p_jumpptr(tmpptr, 1);
  67.             tmpptr = NULL;
  68.             findpz = util_p_sizeptr(find, ptrf);
  69.  
  70.             if (util_p_get_ptr_addr(find) >= util_p_get_ptr_addr(ptrf) + fptrsz)
  71.                 return (unsigned char *)find - fptrsz;
  72.  
  73.             tmpptr = buf;
  74.             buf = util_p_jumpptr(tmpptr, 1);
  75.             tmpptr = NULL;
  76.             bufpz = util_p_sizeptr(ptr, buf);
  77.  
  78.             if (util_p_get_ptr_addr(buf) != util_p_get_ptr_addr(ptr)+bufpz)
  79.             {
  80.                 printf("[util_str] CORRUPTED MEMORY POINTER (PTR) in strstr function %ld != %ld+%ld\r\n", util_p_get_ptr_addr(buf), util_p_get_ptr_addr(ptr), bufpz);
  81.                 bufpz = 0;
  82.                 buf = ptr;
  83.                 continue;
  84.             }
  85.  
  86.             continue;
  87.         }
  88.  
  89.         if (util_p_get_ptr_addr(find) != util_p_get_ptr_addr(ptrf))
  90.         {
  91.             find = (unsigned char *)util_p_jumpptr(ptrf, 0);
  92.             findpz = util_p_sizeptr(ptrf, find);
  93.             continue;
  94.         }
  95.  
  96.         buf = util_p_jumpptr(buf, 1);
  97.     }
  98.  
  99.     return NULL; // Needle not found
  100. }
  101.  
  102. int main()
  103. {
  104.         char *base_str = "exadfadadde\x00\0";
  105.         char *needle_str = "fadadd\x00\0";
  106.         char *print_middle = util_strstr(6, base_str, needle_str);
  107.         printf("base str: %s\r\ngot embedded heap style util_strstr: %s\r\n", base_str, print_middle);
  108.         return 0;
  109. }
  110.  
  111. ➜  ~
  112.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement