首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
经典问答
发新帖
0
0
怎样修改linux程序里的代码的跳转?
发表于: 2011-10-15 19:14
5529
怎样修改linux程序里的代码的跳转?
paulbaby
2011-10-15 19:14
5529
gdb修改linux程序的跳转,怎样修改,什么命令?
如果gdb不能修改的话,那用什么工具来改?
编辑程序的跳转,然后保存下来!
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
收藏
・
0
免费
・
0
支持
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
4
)
ybhdgggset
雪 币:
959
活跃值:
(66)
能力值:
( LV2,RANK:10 )
在线值:
发帖
6
回帖
141
粉丝
0
关注
私信
ybhdgggset
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
007K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0D9L8$3N6Q4x3X3g2U0M7$3c8F1i4K6u0W2L8X3g2@1i4K6u0r3L8r3W2H3k6h3&6Y4j5X3)9I4x3o6l9#2y4o6b7@1y4q4)9J5c8X3q4J5N6r3W2U0L8r3g2Q4x3V1k6V1k6i4c8S2K9h3I4K6i4K6u0r3y4e0R3K6y4e0M7@1z5l9`.`.
2011-10-15 19:44
0
手机宰
雪 币:
50
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
0
回帖
2
粉丝
0
关注
私信
手机宰
3
楼
请问 你那个问题解决了吗
2011-10-16 08:09
0
paulbaby
雪 币:
3800
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
4
回帖
108
粉丝
0
关注
私信
paulbaby
4
楼
虽然没找到满意的答案,但感谢2楼的热情回复!
2011-10-18 00:09
0
paulbaby
雪 币:
3800
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
4
回帖
108
粉丝
0
关注
私信
paulbaby
5
楼
至2011.11.11,所有问题,全部解决,记录一下先
纪录一下,差不多用了1个月
2011-11-12 21:15
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
paulbaby
4
发帖
108
回帖
10
RANK
关注
私信
他的文章
linux程序,能不能加区段?
3499
求个IDA.PRO.调试器,要求支持.LINUX的
3999
怎样修改linux程序里的代码的跳转?
5530
Linux下的程序,用什么调试器
4992
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部