根据第一张图写出需要插入的汇编代码(第二张图说明地址有一些偏移量,并不是0x1be3而是0x555555555be3)
于是写了2threelines.s
然后转换成.o文件的过程中却会报错:
于是把threelines.s换了一种写法(但是不知道这样写对不对!)
此时就惊奇地可以啦
然后反汇编
待会我们要把这些数字插入在%rsp处,然后把%rsp填在返回地址处,这样在返回的时候就可以执行我写的这三行汇编代码的命令。
接下来查看%rsp
我决定把断点设在1ba6处,此时info r:
结合以上两张图片得到输入字符串的16进制版本:
556647a8变成了556647b9,看来是在返回地址的地方就出了问题。
考虑到偏移了0x11,我决定把556647a8变成55664797
我又创建了一个shift2.txt
这次再运行时,却出现了另一个报错。
10.29--------------
尝试把最后一行0去掉,结果出现了另一种偏移
尝试直接用反汇编的值,就是说touch2的地址不用0x555555555be3,而是0x1be3,写了一个newlines.s
但是如果我最后一行不加00 00 00 00 报错和之前用555555555be3是一样的
但是如果我最后一行补上0,就出现了不一样的报错!
说明总算是读出了返回地址并且成功跳转了,但是0x1be3明明是touch2,为什么认不出呢?
gdb还是把它认成555555555be3
按照同学的建议我写了另一个lines3.s
据此写了hex5.txt
报错和之前的2222.txt版本是一样的,就是1be3认不出。
写了一个新的line7.s,把地址mov进寄存器后再push进栈中
据此写了hex7.txt