Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static void
- argument_passing (struct process_args *args, void **esp_)
- {
- void *esp = *esp_;
- void *org_esp = esp;
- int argc = args->argc;
- char *argv_ptr[argc + 1];
- for (int i = 0 ; i < argc ; i++)
- {
- int len = strlen (args->argv[i]);
- esp -= (len + 1) * sizeof (char);
- strlcpy (esp, args->argv[i], len + 1);
- argv_ptr[i] = esp;
- printf ("%p\targv[%d] data\t%s\n", esp, i, (char *) esp);
- }
- esp -= ((int)esp % 4 + 4) % 4;
- argv_ptr[argc] = NULL;
- for (int i = argc ; i >= 0 ; i--)
- {
- esp -= sizeof (char *);
- memcpy (esp, &argv_ptr[i], sizeof (char *));
- printf ("%p\targv[%d] pointer\t%p\n", esp, i, *(void **)esp);
- }
- memcpy (esp - sizeof(char **), &esp, sizeof (char **));
- esp -= sizeof (char **);
- printf ("%p\targv pointer\t%p\n", esp, *(void **)esp);
- esp -= sizeof (int);
- memcpy (esp, &argc, sizeof (int));
- printf ("%p\targc\t\t%d\n", esp, *(int *)esp);
- esp -= sizeof (int);
- memset (esp, 0, sizeof (int));
- printf ("%p\treturn address\t%p\n", esp, *(void **)esp);
- printf ("Stack Size: %d\n", esp - org_esp);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement