Please, notice that Entry Point Virtualization is not compatible with some applications (specially with some compilers). When you virtualize your Entry Point, it will be destroyed and emulated somewhere else in the protection memory. Some compilers, jump at a later point in the middle of the Entry Point code, so as it’s virtualized it will execute invalid opcodes and will produce a crash in the protected application. In that case, you have to protect your application unchecking the option “Entry Point Virtualization”.
Notice that Entry Point Virtualization has the same effect as putting a VM macro in the beginning of your main function. So, you can just use VM macros in several parts of your application and you will keep a high level of protection inside your application.