鱼C论坛

 找回密码
 立即注册
查看: 3374|回复: 10

高手们,帮我看一个程序,谢谢了。

[复制链接]
发表于 2012-3-2 14:09:26 | 显示全部楼层 |阅读模式
1鱼币
本帖最后由 Sing 于 2012-3-2 20:44 编辑

请大家帮我看看下面的程序那两个(?)号处应该怎么填。因本人是新手,所以还请大家解释得尽量详细点。谢谢各位了。

补全程序,使jmp指令执行后,CS:IP指向程序的第一条指令。
assume cs:code
data segment
  dd 123456789H
data ends

code segment

    start:  mov ax, data
              mov da, ax
              mov bx, 0
              mov [bx], (?)
              mov [bx+2], (?)
              jmp dword ptr ds:[0]

code ends
end start

最佳答案

查看完整内容

点编辑拉 !~给标题改成已经解决 悬赏的在你主题那篇右下角!~有个选择最佳选项吧!~ 以后提问都要有始有终喔 即使没人回答 一段时间后也要给标题改成 讨论或者在自己学会明白了以后改成以解决!~ 这样版主不会太忙太累的去整理!~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-2 14:09:27 | 显示全部楼层

点编辑拉 !~给标题改成已经解决
悬赏的在你主题那篇右下角!~有个选择最佳选项吧!~
以后提问都要有始有终喔 即使没人回答  一段时间后也要给标题改成 讨论或者在自己学会明白了以后改成以解决!~  这样版主不会太忙太累的去整理!~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-2 14:19:51 | 显示全部楼层
本帖最后由 莫名其妙 于 2012-3-2 15:20 编辑

看了半天觉得眼熟 翻翻书发现你写的是 检测的点的内容,,,,     dd 的数据是12345678h

首先程序代码段开始的地方 是 cs:ip   →   cs:0000
但是程序的第一条指令不一定就是在  cs:0000      这点一定要明白!~  
(当然你会见到这样的例题   比如 mov ax,4c00h  int 21h在代码段开始的地方    在程序执行的第一条指令之前)

start:  mov ax, data   ; 这道题里   start : 的地方就是程序的第一条指令
              mov ds, ax
;0B86:0000  78 56 34 12 00 00 00 00-00 00 00 00 00 00 00 00  这进行 data 数据进段后 内存单元中数据的存放(当然你机器上的段地址 和代码段地址数据可能跟我不一样)
             mov bx, 0
;AX=0B86  BX=0000  CX=0026  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
;DS=0B86  ES=0B76  SS=0B86
CS=0B87  IP=000A   NV UP EI PL NZ NA PO NC   这是BX等于0以后 各寄存器和个段地址的数据
                                                                                                                                                ( ip )
              mov [bx], (BX  ) ;   因为题目要求跳转后转到代码段开始的地方意思就是跳转到 CS : 0000 处     所以ds:[bx],bx 要等于0
;0B86:0000  00 00 34 12 00 00 00 00-00 00 00 00 00 00 00 00   这是执行 bx=0后内存中数据的存放
              mov [bx+2], ( CS   )
;0B86:0000  00 00 87 0B 00 00 00 00-00 00 00 00 00 00 00 00  看  内存数据的存放, 注意 87 0B 就是当前CS段地址的值
          jmp dword ptr ds:[0]

    dword ptr ds:[0]  这里是从ds段 0号偏移地址开始的 取两个字形数据
jmp dword ptr ds:[0]  这句话的意思是 取两个字形数据 低字做IP  高字做CS 然后跳转过去  在书本p182页  9.6节写的还是比较清楚的






想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-3-2 20:28:34 | 显示全部楼层
莫名其妙 发表于 2012-3-2 14:19
看了半天觉得眼熟 翻翻书发现你写的是 检测的点的内容,,,,     dd 的数据是12345678h

首先程序代码段开始 ...

嗯嗯。整个过程我是明白了,先谢谢你。不过还有一点不明白的是,在0B86:00 00  00 00 87 0B 00  00 00 00-00 00 00 00 00 00 00 00   这个内存数据中,为什么存放着 87 0B 这数据而不是别的?还有一点就是,我该如何分辨程序的第一条指令是不是在CS:0000呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-2 20:29:41 | 显示全部楼层
本帖最后由 莫名其妙 于 2012-3-2 20:32 编辑
Sing 发表于 2012-3-2 20:28
嗯嗯。整个过程我是明白了,先谢谢你。不过还有一点不明白的是,在0B86:00 00  00 00 87 0B 00  00 00 0 ...


这个 87 0b是我机器上的代码段地址啊   
你看我上面标记红色的那个CS


因为jmp dword ptr 加内存数据是调取的       低位  IP    高位 cs     我机器上的ds是0b86   cs 是0b87 所以  才会有0b87

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-3-2 20:32:54 | 显示全部楼层
莫名其妙 发表于 2012-3-2 20:29
这个 87 0b是我机器上的代码段地址啊   
你看我上面标记红色的那个CS

嗯嗯。谢谢你的帮助哦。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-2 20:34:38 | 显示全部楼层
Sing 发表于 2012-3-2 20:32
嗯嗯。谢谢你的帮助哦。

亲 给好评喔!~
搞定了要给标题改成以解决喔!~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-3-2 20:37:32 | 显示全部楼层
莫名其妙 发表于 2012-3-2 20:34
亲 给好评喔!~
搞定了要给标题改成以解决喔!~

亲,我也想给你好评啊,可是那个解决的标号我怎么弄,还有怎样给好评的啊。那一个鱼币又是怎样给你的啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-3 01:22:01 | 显示全部楼层
学习来了,围观~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-5 15:30:51 | 显示全部楼层
pop ip pop cs
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-1-11 18:09:55 | 显示全部楼层
学习来了,围观~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-19 18:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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