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?
You must log in or # to comment.
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 } }