Most defense techniques against ROP revolves around randomization, such as ASLR.
If I mark all regions of memory, other than the code segment, non-executable, will this defeat ROP?
No. Actually, most RoP attacks make use of existing codes (former return-into-libc-attacks). So, the RoP gadgets are snippets of existing code and have to be executable.