首页
社区
课程
招聘
怎样修改linux程序里的代码的跳转?
发表于: 2011-10-15 19:14 5415

怎样修改linux程序里的代码的跳转?

2011-10-15 19:14
5415
gdb修改linux程序的跳转,怎样修改,什么命令?

如果gdb不能修改的话,那用什么工具来改?

编辑程序的跳转,然后保存下来!

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 959
活跃值: (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
一旦使用 GDB 挂上被调试程序,当程序运行起来后,你可以根据自己的调试思路来动态地在 GDB 中更改当前被调试程序的运行线路或是其变量的值,这个强大的功能能够让你更好的调试你的程序,比如,你可以在程序的一次运行中走遍程序的所有分支。
   
   
一、修改变量值

    修改被调试程序运行时的变量值,在 GDB 中很容易实现,使用 GDB 的 print 命令即可完成。如:
   
        (gdb) print x=4
   
    x=4 这个表达式是 C/C++ 的语法,意为把变量 x 的值修改为 4 ,如果你当前调试的语言是 Pascal ,那么你可以使用 Pascal 的语法: x:=4 。
   
    在某些时候,很有可能你的变量和 GDB 中的参数冲突,如:
   
        (gdb) whatis width
        type = double
        (gdb) p width
        $4 = 13
        (gdb) set width=47
        Invalid syntax in expression.

    因为, set width 是 GDB 的命令,所以,出现了 “ Invalid syntax in expression ” 的设置错误,此时,你可以使用 set var 命令来告诉 GDB , width 不是你 GDB 的参数,而是程序的变量名,如:
   
        (gdb) set var width=47
      
    另外,还可能有些情况, GDB 并不报告这种错误,所以保险起见,在你改变程序变量取值时,最好都使用 set var 格式的 GDB 命令。
   

二、跳转执行

    一般来说,被调试程序会按照程序代码的运行顺序依次执行。 GDB 提供了乱序执行的功能,也就是说, GDB 可以修改程序的执行顺序,可以让程序执行随意跳跃。这个功能可以由 GDB 的 jump 命令来完:
   
    jump <linespec>
    指定下一条语句的运行点。 <linespce> 可以是文件的行号,可以是 file:line 格式,可以是 +num 这种偏移量格式。表式着下一条运行语句从哪里开始。
   
    jump <address>
    这里的 <address> 是代码行的内存地址。
   
    注意, jump 命令不会改变当前的程序栈中的内容,所以,当你从一个函数跳到另一个函数时,当函数运行完返回时进行弹栈操作时必然会发生错误,可能结果还是非常奇怪的,甚至于产生程序 Core Dump 。所以最好是同一个函数中进行跳转。
   
    熟悉汇编的人都知道,程序运行时,有一个寄存器用于保存当前代码所在的内存地址。所以, jump 命令也就是改变了这个寄存器中的值。于是,你可以使用 “ set $pc ” 来更改跳转执行的地址。如:
   
    set $pc = 0x485

http://blog.csdn.net/lipengbo10054444/article/details/5835748
2011-10-15 19:44
0
雪    币: 50
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
请问 你那个问题解决了吗
2011-10-16 08:09
0
雪    币: 3800
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
虽然没找到满意的答案,但感谢2楼的热情回复!
2011-10-18 00:09
0
雪    币: 3800
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
至2011.11.11,所有问题,全部解决,记录一下先

纪录一下,差不多用了1个月
2011-11-12 21:15
0
游客
登录 | 注册 方可回帖
返回
//