gdb 段错误调试
如果 rand 之前没有 srand
会用 1 作为默认种子
page fault 和 access fault 的区别
page fault 是读写执行权限的错误,access 是 kernel 还是 user 的错误。
access fault 也有可能由于 PMA(Physical Memory Attribute)检查失败产生。
物理内存属性(PMA:Physical Memory Attributes)检查失败通常发生在处理器试图访问具有特定属性的物理内存时,但该访问违反了这些属性的规定。
canary
原来,所有栈的 canary 都相同
前一个函数的栈帧内容没有被清空,会被后续的函数再使用,alloca 可以调整取得栈变量的位置。从而泄露 canary。
pwntools
# 寻找一个字符串
binsh = libc_base + next(libc.search(b'/bin/sh'))
# 按照正则来接收
canary = p.recvregex("(\-*\d+\.\d+)")
# struct 来打包和解包
# https://www.cnblogs.com/litaozijin/p/6506354.html
>>> f = -3001136621000090411588975790367592799993690258910694055348200145211620623843852288.000000
>>> hex(u64(pack('<d', f)))
'0xd0d94f9496fdf700'