鱼C论坛

 找回密码
 立即注册
查看: 3627|回复: 9

零基础入门学习汇编语言010 - 寄存器(CPU工作原理)05 的问题

[复制链接]
发表于 2011-6-12 10:01:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 loop 于 2011-6-19 01:00 编辑


他的 QQ截图20110612095758.png

ax=0000

bx=0000

这么jmp之后会到10000

又不是到0000H那?

为什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-6-12 10:02:07 | 显示全部楼层
沙发等待中:D
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-12 10:20:58 | 显示全部楼层
jmp bx
的确是0000H  jmp bx是修改IP  并没修改cs  所以cs还是1000  1000H*16+IP(0000)就等于10000
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-6-12 10:54:49 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-12 11:56:44 | 显示全部楼层
我学得还是重新看一下吧,你这个问题在视频里就有很好的说明
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-12 13:05:29 | 显示全部楼层
本帖最后由 再生缘 于 2011-6-12 13:13 编辑
知足、常乐 发表于 2011-6-12 10:54
那他为什么不修改CS 要修改IP


你是问jmp bx为什么是修改IP的话 而不是修改CS吧
看这里
http://bbs.fishc.com/forum.php?mod=viewthread&tid=2334&extra=page%3D1


评分

参与人数 1鱼币 +2 收起 理由
loop + 2 赞一个!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-6-12 19:05:26 | 显示全部楼层
再生缘 发表于 2011-6-12 13:05
你是问jmp bx为什么是修改IP的话 而不是修改CS吧
看这里
http://bbs.fishc.com/forum.php?mod=viewt ...

谢谢,明白啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-12 19:31:01 | 显示全部楼层
jmp可以直接修改寄存器和IP的值      既然指定的是cs:20000H ip:0000H   那么第一条指令是mov ax,6622H
  第二条指令肯定是下边的Jmp 1000:3   这个是物理地址=段地址*16+偏移地址  就是10003H   左边的第二个  mov ax,0000     然后继续下去左边第三个指令mov bx,ax   继续下去Jmp bx    既然上一条指令时mov ax,bx   (就是AX的值放进BX  那就是0000H)  但是前面的内容有一张我记得是jmp bx就是说CS和BX的值不发生改变   改变的是IP地址    既然都是0   那么CS的值还是20000H   BX=0000H  IP=0000H   那么合起来的物理地址还是20000H  所以又跳到右边第一条去执行    就是一个死循环过程  让你找不到出口;P
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-12 20:08:37 | 显示全部楼层
本帖最后由 再生缘 于 2011-6-12 20:19 编辑
嗜血丨灵异狂 发表于 2011-6-12 19:31
jmp可以直接修改寄存器和IP的值      既然指定的是cs:20000H ip:0000H   那么第一条指令是mov ax,6622H
   ...





你上面说的“那么CS的值还是20000H   BX=0000H  IP=0000H   ”这里是错的
  执行到左下角最后一到指令 jmp bx ,这里是修改IP的值,CS是没变 ,但在一开始第二道指令的时候(也就是右上角第二道指令)jmp 1000:3 时,CS已经被修改为1000,所以你说的“那么cs的值还是2000”这句话是错的


jmp bx执行这个指令后cs是1000  ip是0000  (因为上道指令是把ax发送到bx,那么继续往上道指令看ax的值  是把0000发送到ax,这样一来ip就被修改为0000   ),cs1000 ip0000得出的物理地址就是10000  所以继续执行mov ax,0123H,也就是左上角第一道指令。这样无止境的循环下去!



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-18 19:26:00 | 显示全部楼层
本帖最后由 Miller01001 于 2011-6-18 19:26 编辑

jmp跳转指令啊,1000:3直接执行到段地址为10003的位置,因为段地址1000*16H+偏移地址3=物理地址嘛
比如你程序前面都加了一些加密的壳啊或者垃圾代码,如果你知道程序的真正入口,你直接用JMP跳转到程序的真正入口main函数, 这程序就你的啦!
10000H|a2
10001H|b2
10002H|
10003H|
10004H|
mov ax,a2
jmp 1000:3
下句指令执行什么呢?
总之就是jmp可以跳转到任何物理地址,其实就是修改了CS:IP的地址!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 17:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表