title: Stack canaries can be disabled by compiler?
body: <p>Who is responsible for inserting the stack canaries in the stack? Is it the OS?
  If yes, how can the gcc compiler disable them by using the <code>-fno-stack-protector</code> option? Or it is only a flag created using that option and added to the binary to tell the OS to not insert canaries in the stack where the binary is loaded at runtime?</p>
  
  <p><strong>EDIT: one more question</strong></p>
  
  <p>Who checks the value of the canaries if they were changed over the execution?
  Again if inserted by the compiler, how can be checked by the OS? If inserted by the OS how can it be disabled by the compiler (main question)?</p>