📄 技术难点.txt
字号:
3月14日
1,objdump -d bufbomb.o和objdump -d bufbomb得到的汇编代码段是否有区别?
一个是没有链接,一个链接过了.选择使用objdump -d bufbomb,因为这个代码链接过了,可以通过eip的值来观察具体执行到哪条代码
2,gdb调试时设置的断点处于printf()语句的后面,可是为什么不先打印出那句话?
因为实际上通过观察eip的值可以发现指令执行并没有达到调用printf()语句的那条指令
3, 在gdb中p /x *(int*)(ebp)是打印ebp中的值还是ebp所指单元中的值?
打印的是ebp所指单元中的值,如果要打印ebp的值,可以使用p /x $ebp即行
3月15日
1,寄存器eip中存储的是当前执行的指令的地址,可以通过p /x $eip来观察现在执行到哪条指令。
2,究竟应该写入一些什么样的值了?这些值要求具有什么特性才能保证能够达到题目中的要求?
3,test和getbuf 的栈分布情况表究竟是什么样的了?
当设置断点break getbuf时,函数的执行已经进入了getbuf函数,此时栈桢处于getbuf函数的栈桢中
______
______ ebp test函数的栈桢 0xbfffdfe8
______
______ esp bfffdfe0 当程序执行至48行和49行时的栈首指针,指令地址分别为0x80484aa和0x80484ba
______ 此处有2个存储器单元没有使用
______
______ getbuf函数返回到test函数时的返回地址, 内容为0x80484bf,即位调用getbuf指令的后一条指令
______ ebp getbuf函数的栈桢 0xbfffdfd8
______
______
______ 此处有6个储存器单元没有使用
______
______
______ esp 0xbfffdfc0
4,写进buffer的数据是怎么存放的?总共为buffer分配多少空间?
存放在getbuf函数的栈桢中,从$ebp -24号存储单元开始存放,一直往栈地址增大的方向存放,可以一直到$ebp -1,注意最后一定要留一个字节给'\0',否则当程序试图自己往$ebp -1号存储单元里面写入'\0'时会出现段错误.
5, test函数中getbuf 函数的返回值是1?那么eax里面保存的就是数值1罗?局部变量val保存在什么位置?是否可以运用别人的思想?
就是改变保存局部变量val的存储单元的值,同时改变getbuf函数的返回地址使其指向下一条指令的地址?
返回值是1,保存在局部变量 val中,而val的保存地址是$ebp -4。处于test的栈桢中
6,注意输入数据的时候要将低位字节输入在前。
7, 由于在getxs函数中存在最后一句话 *sp++ = '\0';所以如果只是简单的改变一下val变量的存储单元的值,会造成这句话在写入时破坏test
栈桢中所保存的main函数ebp值和返回地址,所以要重新覆盖这两个单元的值。
8,为什么main函数的ebp值老是在变化?
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -