2
submitted 10 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 10 months ago* (last edited 10 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++

843 readers
2 users here now

founded 5 years ago
MODERATORS