反汇编调试-从寄存器级看程序运行

反汇编调试-从寄存器级看程序运行说明主函数在调用子函数保存下一条指令的地址到lr寄存器中;跳转到子函数保存pc、lr、ip、fp四个寄存器的https://mp.weixin.qq.com/s?__biz=Mzg3NDkwMjc2NA==&mid=2247483769&idx=1&sn=33ea693f9adcbb7d128b5b34ecdc5cae&chksm=cec8e4faf9bf6dec0e743697628aceafd0b2dfbe6603bea12e66e9bf86d830c22af6e748f917#rd

  • 主函数在调用子函数

  • 保存下一条指令的地址到lr寄存器中;

  • 跳转到子函数

  • 保存pc、lr、ip、fp四个寄存器的值到内存中;其中ip的作用是备份栈地址;

  • 当子函数返回时,恢复保存在栈中的寄存器的值(通过直接修改pc寄存器的方式(在恢复现场的时候,把原lr保存的值赋值给pc实现),实现子函数返回。)

  • 主函数在调用子函数

  • 保存下一条指令的地址到lr寄存器中;

  • 跳转到子函数

  • 保存pc、lr、ip、fp四个寄存器的值到内存中;其中ip的作用是备份栈地址;

  • 当子函数返回时,恢复保存在栈中的寄存器的值(通过直接修改pc寄存器的方式(在恢复现场的时候,把原lr保存的值赋值给pc实现),实现子函数返回。)


00000000 <_start>:
   0:  e3a00a01   mov  sp, #4096  ; 0x1000
   4:  eb000049   bl  130 <main>


00000008 <halt>:
   8:  eafffffe   b  8 <halt>


-> 0000000c <LedInit>:
   c:  e1a0c00d   mov  ip, sp
  10:  e92dd800   stmdb  sp!, {fp, ip, lr, pc}
  14:  e24cb004   sub  fp, ip, #4  ; 0x4
  18:  e3a0220e   mov  r2, #-536870912  ; 0xe0000000
  1c:  e2822602   add  r2, r2, #2097152  ; 0x200000
  20:  e2822d0a   add  r2, r2, #640  ; 0x280
  24:  e3a0320e   mov  r3, #-536870912  ; 0xe0000000
  28:  e2833602   add  r3, r3, #2097152  ; 0x200000
  2c:  e2833d0a   add  r3, r3, #640  ; 0x280
  30:  e5933000   ldr  r3, [r3]
  34:  e1a03823   mov  r3, r3, lsr #16
  38:  e1a03803   mov  r3, r3, lsl #16
  3c:  e5823000   str  r3, [r2]
  40:  e3a0220e   mov  r2, #-536870912  ; 0xe0000000
  44:  e2822602   add  r2, r2, #2097152  ; 0x200000
  48:  e2822d0a   add  r2, r2, #640  ; 0x280
  4c:  e3a0320e   mov  r3, #-536870912  ; 0xe0000000
  50:  e2833602   add  r3, r3, #2097152  ; 0x200000
  54:  e2833d0a   add  r3, r3, #640  ; 0x280
  58:  e5933000   ldr  r3, [r3]
  5c:  e3833c11   orr  r3, r3, #4352  ; 0x1100
  60:  e3833011   orr  r3, r3, #17  ; 0x11
  64:  e5823000   str  r3, [r2]
  68:  e3a0220e   mov  r2, #-536870912  ; 0xe0000000
  6c:  e2822602   add  r2, r2, #2097152  ; 0x200000
  70:  e2822fa3   add  r2, r2, #652  ; 0x28c
  74:  e3a0320e   mov  r3, #-536870912  ; 0xe0000000
  78:  e2833602   add  r3, r3, #2097152  ; 0x200000
  7c:  e2833fa3   add  r3, r3, #652  ; 0x28c
  80:  e5933000   ldr  r3, [r3]
  84:  e38330ff   orr  r3, r3, #255  ; 0xff
  88:  e5823000   str  r3, [r2]
  8c:  e3a0220e   mov  r2, #-536870912  ; 0xe0000000
  90:  e2822602   add  r2, r2, #2097152  ; 0x200000
  94:  e2822fa2   add  r2, r2, #648  ; 0x288
  98:  e3a0320e   mov  r3, #-536870912  ; 0xe0000000
  9c:  e2833602   add  r3, r3, #2097152  ; 0x200000
  a0:  e2833fa2   add  r3, r3, #648  ; 0x288
  a4:  e5933000   ldr  r3, [r3]
  a8:  e3c330ff   bic  r3, r3, #255  ; 0xff
  ac:  e5823000   str  r3, [r2]
  b0:  e3a0220e   mov  r2, #-536870912  ; 0xe0000000
  b4:  e2822602   add  r2, r2, #2097152  ; 0x200000
  b8:  e2822fa2   add  r2, r2, #648  ; 0x288
  bc:  e3a0320e   mov  r3, #-536870912  ; 0xe0000000
  c0:  e2833602   add  r3, r3, #2097152  ; 0x200000
  c4:  e2833fa2   add  r3, r3, #648  ; 0x288
  c8:  e5933000   ldr  r3, [r3]
  cc:  e38330aa   orr  r3, r3, #170  ; 0xaa
  d0:  e5823000   str  r3, [r2]
  d4:  e3a0220e   mov  r2, #-536870912  ; 0xe0000000
  d8:  e2822602   add  r2, r2, #2097152  ; 0x200000
  dc:  e2822fa1   add  r2, r2, #644  ; 0x284
  e0:  e3a0320e   mov  r3, #-536870912  ; 0xe0000000
  e4:  e2833602   add  r3, r3, #2097152  ; 0x200000
  e8:  e2833fa1   add  r3, r3, #644  ; 0x284
  ec:  e5933000   ldr  r3, [r3]
  f0:  e383300f   orr  r3, r3, #15  ; 0xf
  f4:  e5823000   str  r3, [r2]
  f8:  e89da800   ldmia  sp, {fp, sp, pc}


-> 000000fc <Delay>:
  fc:  e1a0c00d   mov  ip, sp
 100:  e92dd800   stmdb  sp!, {fp, ip, lr, pc}
 104:  e24cb004   sub  fp, ip, #4  ; 0x4
 108:  e24dd004   sub  sp, sp, #4  ; 0x4
 10c:  e50b0010   str  r0, [fp, #-16]
 110:  e51b3010   ldr  r3, [fp, #-16]
 114:  e2433001   sub  r3, r3, #1  ; 0x1
 118:  e50b3010   str  r3, [fp, #-16]
 11c:  e51b3010   ldr  r3, [fp, #-16]
 120:  e3730001   cmn  r3, #1  ; 0x1
 124:  0a000000   beq  12c <Delay+0x30>
 128:  eafffff8   b  110 <Delay+0x14>
 12c:  e89da808   ldmia  sp, {r3, fp, sp, pc}


-> 00000130 <main>:
 130:  e1a0c00d   mov  ip, sp
 134:  e92dd800   stmdb  sp!, {fp, ip, lr, pc}
 138:  e24cb004   sub  fp, ip, #4  ; 0x4
 13c:  e24dd004   sub  sp, sp, #4  ; 0x4
 140:  e3a03000   mov  r3, #0  ; 0x0
 144:  e50b3010   str  r3, [fp, #-16]
-> 148:  ebffffaf   bl  c <LedInit>
 14c:  e3a0220e   mov  r2, #-536870912  ; 0xe0000000
 150:  e2822602   add  r2, r2, #2097152  ; 0x200000
 154:  e2822fa1   add  r2, r2, #644  ; 0x284
 158:  e3a0320e   mov  r3, #-536870912  ; 0xe0000000
 15c:  e2833602   add  r3, r3, #2097152  ; 0x200000
 160:  e2833fa1   add  r3, r3, #644  ; 0x284
 164:  e5933000   ldr  r3, [r3]
 168:  e3c3300f   bic  r3, r3, #15  ; 0xf
 16c:  e5823000   str  r3, [r2]
 170:  e3a00713   mov  r0, #4980736  ; 0x4c0000
 174:  e2800c4b   add  r0, r0, #19200  ; 0x4b00
 178:  e2800040   add  r0, r0, #64  ; 0x40
 -> 17c:  ebffffde   bl  fc <Delay>
 180:  e3a0220e   mov  r2, #-536870912  ; 0xe0000000
 184:  e2822602   add  r2, r2, #2097152  ; 0x200000
 188:  e2822fa1   add  r2, r2, #644  ; 0x284
 18c:  e3a0320e   mov  r3, #-536870912  ; 0xe0000000
 190:  e2833602   add  r3, r3, #2097152  ; 0x200000
 194:  e2833fa1   add  r3, r3, #644  ; 0x284
 198:  e5933000   ldr  r3, [r3]
 19c:  e383300f   orr  r3, r3, #15  ; 0xf
 1a0:  e5823000   str  r3, [r2]
 1a4:  e3a03000   mov  r3, #0  ; 0x0
 1a8:  e1a00003   mov  r0, r3
 1ac:  e89da808   ldmia  sp, {r3, fp, sp, pc}
Disassembly of section .comment:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OllyDbg发行版是一个ZIP压缩包,只要解压运行OllyDbg.exe即可。运行OllyDbg打开进程,主窗口显示反汇编清单。各窗口的外观属性如:“标题栏(bar)、字体(font)”等在右键菜单"界面选项(appearance)"里控制 1.代码窗口   代码窗口(OllyDbg帮助文件自称反编汇窗口)显示被调试程序的代码。他有四个列   地址/Address(虚拟地址) HEX 数据/HEX dump(机器码) 反编汇/Diassassembly(汇编代码) 注释/Comment(注释)   最后一列注释(Comment)显示相关API参数或运行简表,非常有用,有点类似于IDA Pro。   在代码窗口(地址行,不是列标题)双击时完成动作。   ●地址(Address)列:显示相对被双击地址的地址,再次双击返回标准地址模式;   ●HEX 数据(HEX dump)列:设置或取消无条件断点,按F2键也能设置断点;   ●反编汇(Diassassembly)列:调试编辑器,可直接修改汇编代码;   ●注释(Comment)列:允许增加或编辑注释。   代码窗口允许浏览、分析、搜索和修改代码,保存改变到可执行文件,设置断点等。相关弹出式菜单包括100多项。 2.信息窗口(Information window)   动态跟踪时,与指令相关的各寄存器的值、API函数调用提示、跳转提示等信息显示。 3.数据窗口   以十六进制或内存方式显示文件在内容中的数据,类似于softICE的数据窗口。要显示数据可单击右键"转到→表达式(Go to→expression)"或按Ctrl+G键打开地址窗口,输入地址。 4.寄存器(Registers window)   显示CPU各寄存器的值,支持浮点(FPU)、MMX,3DNow!寄存器,可以单击鼠标右键切换。 5.堆栈窗口(Stack window)   堆栈窗口非常重要,各API函数、子程序等都利用它传递参数、变量等。OllyDbg堆栈窗口功能强大。如果传递的参数都是字符串,OllyDbg会在注释里直接将其显示出来,再也不用像SoftICE那样经常用D命令查看内存数据了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值