Skip to content
Snippets Groups Projects
Commit 2bd03623 authored by an7s's avatar an7s
Browse files

cleanup debug

parent cc3abe9b
No related branches found
No related tags found
No related merge requests found
#!/bin/bash
./configure --enable-debugging --enable-datashadow --enable-libc --prefix=$ZIPR_INSTALL $*
#./configure --enable-debugging --enable-datashadow --enable-libc --prefix=$ZIPR_INSTALL $*
./configure --enable-datashadow --enable-libc --prefix=$ZIPR_INSTALL $*
......@@ -2,40 +2,13 @@
* Function pointer/data shadowing
*/
#include <stdlib.h>
//
// When writing a callback handler/detector
//
// argument #1 : return address
// argument #2 : register data structure
// argument #3..#6: optional set of args specific to the callback handler
//
// #include <stdlib.h>
#define MAX_DIAGNOSTIC_SIZE 1024
/* the registers are saved onto the stack in this order */
typedef struct reg_values reg_values_t;
struct reg_values
{
size_t flags;
size_t r15;
size_t r14;
size_t r13;
size_t r12;
size_t r11;
size_t r10;
size_t r9;
size_t r8;
size_t rax;
size_t rbx;
size_t rcx;
size_t rdx;
size_t rsi;
size_t rdi;
size_t rbp;
size_t rsp;
};
// Has to match client side (fptr_shadow)
#define SHADOW_TERMINATE 1
#define SHADOW_CONTINUE 2
static void my_strcpy(char *dest, char *src)
{
......@@ -43,27 +16,12 @@ static void my_strcpy(char *dest, char *src)
while(*dest++ = *src++);
}
// void signedness_detector_signed(void *p_retAddress, reg_values_t *p_rv, void* p_addressTruncated, volatile long int p_policy)
// shadowMap[p_shadowIndex] = p_shadowValue
// add to multi-valued table
//void fptr_shadow_define_64(void *p_retAddress, reg_values_t *p_rv, void *p_instrumented, int p_shadowIndex, void *p_shadowValue)
void fptr_shadow_define_64(int p_shadowIndex, void *p_shadowValue)
{
#ifdef DEBUG
char msg[MAX_DIAGNOSTIC_SIZE];
add_shadow_entry(p_shadowIndex, p_shadowValue);
// @todo: print first and last element of p_rv and see what we get
// verify against pushed values in the transform
#ifdef DEBUG
my_strcpy(msg, "FPTRSHADOW:DEFINE ");
/*
my_strcpy(&msg[strlen(msg)], " retaddress: ");
itox(p_retAddress, &msg[strlen(msg)]);
my_strcpy(&msg[strlen(msg)], " instrumented: ");
itox(p_instrumented, &msg[strlen(msg)]);
*/
my_strcpy(&msg[strlen(msg)], " shadowid: ");
itox(p_shadowIndex, &msg[strlen(msg)]);
my_strcpy(&msg[strlen(msg)], " value: ");
......@@ -72,42 +30,68 @@ void fptr_shadow_define_64(int p_shadowIndex, void *p_shadowValue)
write(2, msg, strlen(msg));
#endif
add_shadow_entry(p_shadowIndex, p_shadowValue);
}
// check to make sure values match
void fptr_shadow_check_64(int p_shadowIndex, int p_policy, void **p_shadow)
{
char msg[MAX_DIAGNOSTIC_SIZE];
void *restored;
int count = 0;
#ifdef DEBUG
char msg[MAX_DIAGNOSTIC_SIZE];
my_strcpy(msg, "FPTRSHADOW:CHECK: ");
my_strcpy(&msg[strlen(msg)], " shadowid: ");
itox(p_shadowIndex, &msg[strlen(msg)]);
my_strcpy(&msg[strlen(msg)], " policy: ");
itox(p_policy, &msg[strlen(msg)]);
write(2, msg, strlen(msg));
my_strcpy(msg, " shadowValue(loc): ");
itox(p_shadow, &msg[strlen(msg)]);
write(2, msg, strlen(msg));
my_strcpy(msg, " shadowValue: ");
itox(*p_shadow, &msg[strlen(msg)]);
my_strcpy(&msg[strlen(msg)], " \n");
write(2, msg, strlen(msg));
#endif
int success = check_shadow_value(p_shadowIndex, *p_shadow, &restored, &count);
if (!success) {
// oh oh, need to restore
*p_shadow = restored;
switch (p_policy) {
case SHADOW_CONTINUE:
#ifdef DEBUG
my_strcpy(msg, "Warning: overwrite of function pointer detected -- restoring saved value: 0x");
itox(*p_shadow, &msg[strlen(msg)]);
my_strcpy(&msg[strlen(msg)], " \n");
write(2, msg, strlen(msg));
#endif
break;
case SHADOW_TERMINATE:
default:
{
char msg[MAX_DIAGNOSTIC_SIZE];
my_strcpy(msg, "Warning: overwrite of function pointer detected -- induce segfault\n");
write(2, msg, strlen(msg));
my_strcpy(0,""); // induce crash
}
break;
}
}
else
{
#ifdef DEBUG
my_strcpy(msg, "FPTRSHADOW: OK: ");
my_strcpy(&msg[strlen(msg)], " shadowValue: ");
itox(*p_shadow, &msg[strlen(msg)]);
my_strcpy(&msg[strlen(msg)], " \n");
write(2, msg, strlen(msg));
my_strcpy(msg, "FPTRSHADOW: OK: ");
my_strcpy(&msg[strlen(msg)], " shadowValue: ");
itox(*p_shadow, &msg[strlen(msg)]);
my_strcpy(&msg[strlen(msg)], " \n");
write(2, msg, strlen(msg));
#endif
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment