IO_FILE调试
IO_FILE做题流程
前言
在调试IO_FILE类型的题的时候总结的知识点
关于IO_FILE的libc更换
在调试IO类型的题的时候,在之前我们需要换libc,因为一般题目给的libc都是没有符号表的,于是我们寻找一个与之对应的有符号表的libc即可,最好是一样的
没有一模一样的带符号的libc的,相同版本号的也可以
IO_FILE结构体查看
有时候我们在分析IO的时候有对应的结构体可以看是最好的,这样我们就能明确知道我们改了哪些数据,这也是我们为什么要换libc的原因
自带的符号表变量
如果是libc里面本身就有的符号,下面的命令可以直接打印出结构
1 | p [*_IO_list_all] |
可以看到输出结果如下
根据不同的结构体的属性,前面添加* ,&, 不加,有不同的效果
修改后的不会自动识别的地址
有时候我们需要将IO_FILE的结构体或者JUMP表的结构体的地址更改,但是这种时候直接打印地址是不会自动转换为结构体的
于是我们就需要自己去加
例如我要查看我伪造的IO_FILE结构体对不对,用下面这个命令去定义即可
1 | p *(struct _IO_FILE_plus *) addr |
可以看到我们成功将该地址转换为了结构体,也可以看到我们成功修改了vtable的地址,定义也是对的
常用的还有跳表
1 | p *(const struct _IO_jump_t *) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Daily Study!