Checksec

  • Arch:32 位还是 64 位
  • RELRO:栈地址随机化。绕过思路:泄露地址
  • Stack:是否有 canary,有 canary 的话覆盖返回地址时改了 canary 就会导致程序停止。绕过思路:泄露 canary 的内容
  • NX:不存在可执行(X)并且可写(W)的内存区域。如果 NX 没有打开,一般就是使用 shellcode 解题,把 shellcode 写入到某个可写并且可执行的内存区域,然后执行它。如果 NX 打开,则需要 ROP
  • PIE:代码段的地址随机(例如跳转都是相对值),使得 ROP gadget 地址无法确定