Is it simpler to prevent buffer overflows explorations with two stacks in general? One stack for variables and passing arguments, the other for return addresses.
Or things like NX/XD-bits (on AMD/Intel x86) as non-executable stack do it better?
Is it simpler to prevent buffer overflows explorations with two stacks in general? One stack for variables and passing arguments, the other for return addresses.
Or things like NX/XD-bits (on AMD/Intel x86) as non-executable stack do it better?
Itanium has two stacks. I believe one is for storing local variables (like arrays and stuff), while the other is for return addresses. This way, you can't overwrite return addresses by overrunning a buffer.
https://blogs.msdn.microsoft.com/oldnewthing/20050421-28/?p=35833