• readelf -h binary 查看二进制文件头
  • readelf -S binary 查看二进制文件节表(section table)
  • readelf -l binary 查看二进制文件段表(program header table)
  • readelf -x number|name binary 打印下标为number或名字为name的section内容(十六进制)
  • readelf -p number|name binary 以字符串形式打印节区内容
  • readelf -s binary 读取符号表
  • objdump -s binary 将所有节的内容打印出来
  • objdump -d binary 将代码段进行反汇编
  • objdump -r binary 查看重定位表

读/写栈上数据

  • 读:计算出要读的地址是第xxx个不定参数,然后利用%xxx$x 读取(x-十六进制读,lx长整读取(64位))
  • 写:同上,计算xxx,yyy为要写入的值,%yyyc%xxx$hn(写)即可实现栈上数据写入(h-短整型,l-长整型),注意,此时修改的内容不是第xxx个不定参数的内容,而是它指向的内存地址的内容

读/写任意地址数据

  • 读:addr + %xxx$s + signal_str,读取addr地址处的字符串,xxx是根据addr在栈上的地址计算出的不定参数的值,signal_str用于截取获取的字符串,recvuntil(signal_str)
  • 写:addr+%yyyc+%xxx$hn,xxx计算方法同上,yyy+len(addr)为要写入的数据

继续阅读