These factors include null bytes in addresses, variability in the location of shellcode, differences between environments, and various counter-measures in operation.
These factors contributing to the difficulty of the situation are: null bytes in addresses, variability in shellcode location, discrepancies between environments, and various countermeasures in use.