如下所示我们在调试器中看到的PC指向到当前代码位置0x10058!!(实际情况是在arm架构下 PC指向当前位置+8 thumb架构下PC指向当前位置+4,这是流水线机制决定的,牢记!!)
因此下图的PC实际指向是:0x10058+8
gef➤ ni 0x00010058 in _start () ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────[ registers ]──── $r0 : 0x00000000 $r1 : 0x00000000 $r2 : 0x00000000 $r3 : 0x0001005d → <_start+9> add r0, pc, #8 ; (adr r0, 0x10068 <_start+20>) $r4 : 0x00000000 $r5 : 0x00000000 $r6 : 0x00000000 $r7 : 0x00000000 $r8 : 0x00000000 $r9 : 0x00000000 $r10 : 0x00000000 $r11 : 0x00000000 $r12 : 0x00000000 $sp : 0xbefff770 → 0x00000001 $lr : 0x00000000 $pc : 0x00010058 → <_start+4> bx r3 $cpsr : [thumb fast interrupt overflow carry zero negative] ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────[ stack ]──── 0xbefff770│+0x00: 0x00000001 ← $sp 0xbefff774│+0x04: 0xbefff884 → "execve2" 0xbefff778│+0x08: 0x00000000 0xbefff77c│+0x0c: 0xbefff88c → "LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so[...]" 0xbefff780│+0x10: 0xbefffe48 → "SSH_CONNECTION=192.168.176.1 1039 10.0.2.15 22" 0xbefff784│+0x14: 0xbefffe77 → "LANG=en_GB.UTF-8" 0xbefff788│+0x18: 0xbefffe88 → "XDG_SESSION_ID=c1" 0xbefff78c│+0x1c: 0xbefffe9a → "USER=pi" ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────[ code:arm ]──── 0x10040 andeq r0, r1, r0 0x10044 andeq r0, r0, r0, ror r0 0x10048 andeq r0, r0, r0, ror r0 0x1004c andeq r0, r0, r5 0x10050 andeq r0, r1, r0 0x10054 <_start+0> add r3, pc, #1 → 0x10058 <_start+4> bx r3 0x1005c <_start+8> add r0, pc, #8 ; (adr r0, 0x10068 <_start+20>) 0x1005e <_start+10> eors r1, r1 0x10060 <_start+12> eors r2, r2 0x10062 <_start+14> movs r7, #11 0x10064 <_start+16> svc 1
发表评论