2
submitted 11 months ago by deaf_fish@lemm.ee to c/cpp@lemmy.ml

I am writing a unit test and mocking library in C and I want to set the call stack memory to some pre determined value like memset. I want to do this before the test function is called so the test writer can verify they aren't using uninitialized memory in their tests. Is there any somewhat portable way to do this?

top 1 comments
sorted by: hot top controversial new old
[-] deaf_fish@lemm.ee 1 points 11 months ago* (last edited 11 months ago)

Ok, this is an option and I hate it, but I am open if to notes if anyone has any. I think I might have to inline assembly. Here is my first attempt:

static
void rmFillStackData(size_t bytes, unsigned char value)
{
   if(bytes > 0)
   {
      // If anyone knows a better way to do this, please let me know
#if defined(__x86_64__) || defined(_M_X64) || defined(i386) || defined(__i386__) || defined(__i386) || defined(_M_IX86)
      // This works by assuming that the last parameter "value" is at the bottom
      // of the stack. So writing below it is fine. This also assumes the 
      // address of the stack pointer get smaller as the stack gets fuller.
      asm volatile ("loop:\n\t"
                    "mov %1,(%2)\n\t"
                    "dec %2\n\t"
                    "dec %0\n\t"
                    "jne loop\n"
                    : /* No Outputs */
                    : "r"(bytes),"r"(value),"r"(&value)
                    : "memory");
#endif
   }
}
this post was submitted on 27 Oct 2023
2 points (100.0% liked)

C & C++

884 readers
2 users here now

founded 5 years ago
MODERATORS