diff --git a/src/examples/Makefile b/src/examples/Makefile
index c5702291e1b8aed9e73b81afc74a33854aaea44a..a8bb35643565bb3f47cb8b3b3ccfc8903fc37764 100644
--- a/src/examples/Makefile
+++ b/src/examples/Makefile
@@ -4,7 +4,7 @@ SRCDIR = ..
 # To add a new test, put its name on the PROGS list
 # and then add a name_SRC line that lists its source files.
 PROGS = cat cmp cp echo halt hex-dump ls mcat mcp mkdir pwd rm shell \
-	bubsort insult lineup matmult recursor my mycreate mywait myremove
+	bubsort insult lineup matmult recursor my mycreate mywait myremove overflow
 
 # Should work from project 2 onward.
 cat_SRC = cat.c
@@ -22,6 +22,8 @@ my_SRC = my.c
 mycreate_SRC = mycreate.c
 mywait_SRC = mywait.c
 myremove_SRC = myremove.c
+overflow_SRC = overflow.c
+
 
 # Should work in project 3; also in project 4 if VM is included.
 bubsort_SRC = bubsort.c
diff --git a/src/examples/mycreate b/src/examples/mycreate
index bfcba58faf5d343ffabe9872e8d3efe2631d2fa9..24e42fdfffca8de5ab70afbacf205de34e25f5fc 100755
Binary files a/src/examples/mycreate and b/src/examples/mycreate differ
diff --git a/src/examples/myremove b/src/examples/myremove
index 30a7fbe4f8b4a60cf0217b852401f21728bf328c..975c82ef8b9c29287f9b4050eb3867d0bb3cb0ef 100755
Binary files a/src/examples/myremove and b/src/examples/myremove differ
diff --git a/src/examples/myremove.c b/src/examples/myremove.c
index 462570015bba0da7825bec1506ea2bf0e85750f7..59142b511b52a63a2f8e45dc0cfe55efdc9ced3d 100644
--- a/src/examples/myremove.c
+++ b/src/examples/myremove.c
@@ -1,6 +1,6 @@
 #include <stdio.h>
 #include <syscall.h>
-//This file has been created too test the create system call
+//This file has been created too test the remove system call
 int
 main (void)
 {
diff --git a/src/examples/mywait b/src/examples/mywait
index 9bb04d2239d308595753aefa80624b22b737acfa..a4010000006cd579d4cb6ef68abe078bea6918c4 100755
Binary files a/src/examples/mywait and b/src/examples/mywait differ
diff --git a/src/examples/overflow b/src/examples/overflow
new file mode 100755
index 0000000000000000000000000000000000000000..2dfff7ae0a104c1cf712c8129061d2c6a3522082
Binary files /dev/null and b/src/examples/overflow differ
diff --git a/src/examples/overflow.c b/src/examples/overflow.c
new file mode 100644
index 0000000000000000000000000000000000000000..d27c9fde8266aff8d631ccf96295c7f4e91e9daf
--- /dev/null
+++ b/src/examples/overflow.c
@@ -0,0 +1,10 @@
+#include <stdio.h>
+#include <syscall.h>
+//This file has been created too test the overflow exploit
+int
+main (void)
+{
+    remove("\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41");
+    
+    //return EXIT_SUCCESS;
+}
\ No newline at end of file
diff --git a/src/lib/string.h b/src/lib/string.h
index 1fff82a060c32080a99810c4d9413dc97a441910..5ebb8bc59c56ff4d3f1c6ed9858f9e13bcc86711 100644
--- a/src/lib/string.h
+++ b/src/lib/string.h
@@ -18,6 +18,7 @@ size_t strspn (const char *, const char *);
 char *strstr (const char *, const char *);
 void *memset (void *, int, size_t);
 size_t strlen (const char *);
+char *strcpy(char *dest, const char *src);
 
 /* Extensions. */
 size_t strlcpy (char *, const char *, size_t);
@@ -26,7 +27,7 @@ char *strtok_r (char *, const char *, char **);
 size_t strnlen (const char *, size_t);
 
 /* Try to be helpful. */
-#define strcpy dont_use_strcpy_use_strlcpy
+//#define strcpy dont_use_strcpy_use_strlcpy
 #define strncpy dont_use_strncpy_use_strlcpy
 #define strcat dont_use_strcat_use_strlcat
 #define strncat dont_use_strncat_use_strlcat
diff --git a/src/userprog/syscall.c b/src/userprog/syscall.c
index 0f9f31961ea8bc815e213a210086c826cb6b2142..6618942a396807b337f36e6c8065d064c23fc87f 100644
--- a/src/userprog/syscall.c
+++ b/src/userprog/syscall.c
@@ -1,5 +1,6 @@
 #include "userprog/syscall.h"
 #include <stdio.h>
+//#include <string.h>
 #include <syscall-nr.h>
 #include "threads/interrupt.h"
 #include "threads/thread.h"
@@ -11,12 +12,10 @@
 #include "threads/synch.h"
 #include <stdlib.h>
 #include "threads/vaddr.h"
-//#include "userprog/process.c"
+#include "threads/vaddr.h"
 
- 
-struct file* process_get_file (int fd); // FOR READ
-static void check_user (const uint8_t *uaddr);
 
+struct file* process_get_file (int fd); // FOR READ
 void halt (void) NO_RETURN;
 void exit (int status) NO_RETURN;
 pid_t exec (const char *file);
@@ -30,35 +29,9 @@ int write (int fd, const void *buffer, unsigned length);
 void seek (int fd, unsigned position);
 unsigned tell (int fd);
 void close (int fd);
-
-static int32_t get_user (const uint8_t *uaddr);
-
-// void check_user (const void *uaddr); // for read 
+static int32_t usergrab (const uint8_t *uaddr);
 int input_getc (void); // for read 
-// struct file* process_get_file (int fd); //for read
-
-//int memread_user(void *dst, const void *src, size_t n);
-
-struct lock; //All for the lock to work to protect from race vuln
-void lock_init (struct lock *lock);
-void lock_acquire (struct lock *lock);
-bool lock_try_acquire (struct lock *lock);
-void lock_release (struct lock *lock);
-bool lock_held_by_current_thread (const struct lock *lock);
-struct lock filesys_lock;
-
-struct semaphore;
-void sema_init (struct semaphore *sema, unsigned value);
-void sema_down (struct semaphore *sema);
-bool sema_try_down (struct semaphore *sema);
-void sema_up (struct semaphore *sema);
-void sema_self_test (void);
-
-struct condition;
-void cond_init (struct condition *cond);
-void cond_wait (struct condition *cond, struct lock *lock);
-void cond_signal (struct condition *cond, struct lock *lock);
-void cond_broadcast (struct condition *cond, struct lock *lock);
+
 
 struct file_descriptor
   {
@@ -77,57 +50,45 @@ struct process_file
 
 
 
-
-
-
-
-static void fail_invalid_access(void) {
-  if (lock_held_by_current_thread(&filesys_lock))
-    lock_release (&filesys_lock);
-
-  process_exit (-1);
-  NOT_REACHED();
+void strcpy(char *dest, const char *src) 
+{
+    int i = 0;
+    while ((dest[i] = src[i]) != '\0')
+    {
+        i++;
+    } 
 }
 
-
-
-
-
-#include "threads/vaddr.h"
-
+void strcpytest()
+{
+    char a;
+    char b;
+    a = ("letsgetit");
+    b = ("empty");
+    printf(a);
+    printf(b);
+    strcpy(b, a);
+    printf(a);
+    printf(b);
+}
 
 static int
-memread_user (void *src, void *dst, size_t bytes)
+scanmem (void *src, void *dst, size_t bytes)
 {
   int32_t value;
   size_t i;
   for(i=0; i<bytes; i++) {
-    value = get_user(src + i);
-    if(value == -1) // segfault or invalid memory access
-      fail_invalid_access();
+    value = usergrab(src + i);
+
 
     *(char*)(dst + i) = value & 0xff;
   }
   return (int)bytes;
 }
 
-// CHECK USER
-static void
-check_user (const uint8_t *uaddr) {
-  // check uaddr range or segfaults
-  if(get_user (uaddr) == -1)
-    fail_invalid_access();
-}
-
-
-
-
-
-
-
 //GET USER CODE 
 static int32_t
-get_user (const uint8_t *uaddr) {
+usergrab (const uint8_t *uaddr) {
   // check that a user pointer `uaddr` points below PHYS_BASE
   if (! ((void*)uaddr < PHYS_BASE)) {
     return -1;
@@ -140,61 +101,38 @@ get_user (const uint8_t *uaddr) {
   return result;
 }
 
-
-
-
-
-
-
-
-
-
-
-
-
 bool 
 create (const char *file, unsigned initial_size)
 {
   printf("file: %s\n", file);
   printf("initial size: %d\n", initial_size);
   printf("File generated succsessfully!");
-  return filesys_create (file, initial_size);
-}
-
-
+  //char str[20] = "fresh2refresh.com";
+  //char target[25] ="ello";
+  //printf("\n %s \n", str); 
+  //printf("%s \n", target);
+  //strcpy(target, str);
+  //printf("%s \n", str);
+  //printf("%s \n", target);
 
+  return filesys_create (file, initial_size);
 
+}
 
 bool remove(const char* filename) {
-  bool return_code;
+  //bool return_code;
+  char buf [100];
   // memory validation missing no check user function // added now
-  check_user((const uint8_t*) filename);
+  
   printf ("CHECK USER RUN\n");
-  return_code = filesys_remove(filename);
-  printf ("File removed --->");
-  printf (filename);
+  strcpy (buf, filename);
   
-  return return_code;
-}
-
-
-
-
-
-int wait(pid_t pid) {
-  printf ("[DEBUG] Wait : %d\n", pid);
-  return wait(pid);
+  printf ("File removed --->");
+  printf (buf);
+  filesys_remove(buf);
 }
 
 
-
-
-
-
-
-
-
-
 static void syscall_handler (struct intr_frame *);
 
 static uint32_t load_stack(struct intr_frame *f, int offset){
@@ -208,17 +146,6 @@ syscall_init (void)
   intr_register_int (0x30, 3, INTR_ON, syscall_handler, "syscall");
 }
 
-////////////////////////READ CODE////////////////////////////       
-
-/* void // CHECK USER FUNCTION 
-check_user (const uint8_t *uaddr)
-{
-  if ((void *) uaddr < (void *) 0x08048000
-      || (void *) uaddr >= (void *) 0xc0000000)
-    exit (-1);
-}
-*/
-
 struct file* //GET FILE FUNCTION 
 process_get_file (int fd)
 {
@@ -244,37 +171,28 @@ syscall_handler (struct intr_frame *f){
 
     case SYS_READ:
     {
-            //int fd = (int) load_stack(f, 1);
-            //void *buffer = (void*) load_stack(f, 2);
-            //unsigned size = (unsigned) load_stack(f, 3);
-            //f->eax = read(fd, buffer, size);
-            //break;
+
     }
     case SYS_CREATE:
     {
             const char *file;
             unsigned initial_size;
-            memread_user (f->esp + 4, &file, sizeof file);
-            memread_user (f->esp + 8, &initial_size, sizeof initial_size);
+            scanmem (f->esp + 4, &file, sizeof file);
+            scanmem (f->esp + 8, &initial_size, sizeof initial_size);
             f->eax = create (file, initial_size);
             break;
     }
     case SYS_WAIT: 
     {
-            pid_t pid;
-            memread_user(f->esp + 4, &pid, sizeof(pid_t));
 
-            int ret = wait(pid);
-            f->eax = (uint32_t) ret;
-            break;
     }
     case SYS_REMOVE:
     {
             const char* filename;
             bool return_code;
 
-            memread_user(f->esp + 4, &filename, sizeof(filename));
-
+            scanmem(f->esp + 4, &filename, sizeof(filename));
+            
             return_code = remove(filename);
             f->eax = return_code;
             break;
@@ -290,39 +208,5 @@ syscall_handler (struct intr_frame *f){
 
 thread_exit ();
 }
-     
-////////////////////////READ CODE////////////////////////////       
-/*
-int read(int fd, void* buffer, unsigned size) {
-  // memory validation
-  check_user((const uint8_t*) buffer);
-
-  int bytes_read = 0;
-
-  // read from stdin if fd == 0, otherwise read from file
-  if (fd == 0) {
-    // read from stdin
-    for (unsigned i = 0; i < size; i++) {
-      char c = input_getc();
-      if (c == '\0') {
-        break;
-      }
-      *((char*) buffer + i) = c;
-      bytes_read++;
-    }
-  } else {
-    // read from file
-    struct file* f = process_get_file(fd);
-    if (f == NULL) {
-      return -1;
-    }
-    lock_acquire (&filesys_lock);
-    bytes_read = file_read(f, buffer, size);
-    lock_release (&filesys_lock);
-  }
-  return bytes_read;
-}
-*/
-////////////////////////READ CODE////////////////////////////  
-
+    
 
diff --git a/src/utils/pintos-gdb b/src/utils/pintos-gdb
index 4ef38d3f177f1c9b694d422c14efdd2df98809d9..5e195e3536d10c2cbce72cf9de09403361a72b63 100755
--- a/src/utils/pintos-gdb
+++ b/src/utils/pintos-gdb
@@ -1,7 +1,7 @@
 #! /bin/sh
 
 # Path to GDB macros file.  Customize for your site.
-GDBMACROS=/usr/class/cs140/pintos/pintos/src/misc/gdb-macros
+GDBMACROS=/home/dev/uwe_os/gitdown/pintos_student/src/misc
 
 # Choose correct GDB.
 if command -v i386-elf-gdb >/dev/null 2>&1; then