首页
社区
课程
招聘
[求助]gdb调试问题
发表于: 2013-11-19 13:58 13085

[求助]gdb调试问题

2013-11-19 13:58
13085
买了《Android软件安全与逆向分析》这本书,再看到第八章时有点疑问。
最后面,用gdb进行调试的时候,gdbserver启动,端口转发做好,在本地用相应版本的gdb链接到gdbserver,到这里都没有问题。
但是在入口地址下断点后,执行continue命令,会中断在断点的前几条指令,而且我发现,一般是中断在断点的上面一条指令的地址。而且,用ni进行单步,单步一次会走2条机器指令,并伴随下面的提示:
Program terminated with signal SIGILL, Illegal instruction.
走不了几步,程序就SIGILL异常退出了。

如果连接上gdbserver之后,不下任何断点,直接continue,程序可以正常执行并退出。
在不下断点直接continue之后,再次启动gdbserver并用gdb链接,设置一下solib-search-path然后下断点在入口,continue,就可以中断在正确的地址了,而且ni也正常了,没有上面的错误提示,而且每次只单步一条指令。

求解。。。。。。

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 257
活跃值: (44)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
set arm force-mode thumb
2013-11-19 14:59
0
雪    币: 2332
活跃值: (3624)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
3
使用thumb指令级的话,代码就不对了。而且,下断点也断不下来 。
(gdb) target remote :12345
Remote debugging using :12345
warning: Can not parse XML target description; XML support was disabled at compile time
0xb6f3fa40 in ?? ()
(gdb) disas 0x82f4,+20
Dump of assembler code from 0x82f4 to 0x8308:
   0x000082f4:	sub	sp, sp, #24
   0x000082f8:	str	r0, [r11, #-24]
   0x000082fc:	str	r1, [r11, #-28]
   0x00008300:	mov	r3, #1
   0x00008304:	str	r3, [r11, #-16]
End of assembler dump.
(gdb) set arm force-mode thumb 
(gdb) disas 0x82f4,+20
Dump of assembler code from 0x82f4 to 0x8308:
   0x000082f4:	beq.n	0x8328
   0x000082f6:	b.n	0x8794
   0x000082f8:	movs	r0, r3
   0x000082fa:	b.n	0x7d14
   0x000082fc:	asrs	r4, r3, #32
   0x000082fe:	b.n	0x7d18
   0x00008300:	adds	r0, #1
   0x00008302:	b.n	0x8a46
   0x00008304:	adds	r0, #16
   0x00008306:	b.n	0x7d20
End of assembler dump.
(gdb) info b
Num     Type           Disp Enb Address    What
1       breakpoint     keep y   0x000082f4 
(gdb) c
Continuing.
Cannot access memory at address 0x0
[Inferior 1 (Remote target) exited normally]



下面是使用arm指令级,并设置断点后的报错:
(gdb) b *0x82f4
Cannot access memory at address 0x0
Breakpoint 1 at 0x82f4
(gdb) info b
Num     Type           Disp Enb Address    What
1       breakpoint     keep y   0x000082f4 
(gdb) c
Continuing.

Program received signal SIGILL, Illegal instruction.
0x000082f8 in ?? ()
2013-11-19 15:13
0
雪    币: 123
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
请问下lz用gdb+gdbserver调试,info sh能看到模块地址吗?我的只能看到模块名,看不到加载地址...
2013-11-21 20:21
0
雪    币: 5855
活跃值: (438)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
5
me, too
2013-11-23 12:32
0
雪    币: 161
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
嗯,我也有这个问题,后来发现是cspr寄存器,T标志不正确,在thumb代码段还是为0,gdb会判断错误。这个T标志为啥不对,好像和机型有关。我也没弄清禁
2014-5-9 17:11
0
雪    币: 2332
活跃值: (3624)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
7
当时调试的环境是android模拟器,应该可以排除机型错误?
现在调试,还是用IDA的吧,gdb略坑~
2014-5-14 18:18
0
雪    币: 80
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
JBoy,我用info  sh也看不到地址;用cat  proc/[pid]/maps这种方式来看吧  pid替换成你的进程id
2017-4-5 10:09
0
雪    币: 32
活跃值: (1020)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
http://bbs.csdn.net/topics/391909414
2017-10-24 20:13
0
游客
登录 | 注册 方可回帖
返回
//