>>6It would be like saying x86 is a flawed design because someone can write strlen((char*)main)
and compile it.
C is such a flawed design that x86 has to bend over backwards to accommodate its flaws. Proper use of x86 would put functions in the code segment, which can be made execute-only.
This really isn't the sort of thing you can reasonably blame on C, the C compiler only did exactly what it was told to do.
That makes it a ``bug'' in C standard, the C compiler, or both. A proper compiler would not generate code or it would generate run-time checks to prevent the illegal access from happening. Proper use of x86 (segments) would have kept this from happening at all. AMD extended x86 assuming it was a C machine and crippled all of the security mechanisms in 64-bit mode.