We can use a hardware breakpoint on execution, but this breakpoint can be only set on a maximum of four bytes, which means that you have to know the OEP to be able to set one. The more effective solution is to use memory breakpoints on execution.
The ability to use memory breakpoints on execution is available in OllyDbg, and can be accessed by going to View | Memory. Now, we can change the first section's memory permissions to READWRITE if it was Full access:
In this case, we can't execute code in this section until it gets execute permission. By default, in multiple Windows versions, it will still be executable for noncritical processes, even if the memory permissions don't include the EXECUTE permission. Therefore, you need to enforce what's called Data Execution Prevention (DEP), which enforces the EXECUTE permission and doesn't allow any non-executable data to be executed...