中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » 让你看看纯机器指令是怎么运行的,嘿嘿!
作者:
标题: 让你看看纯机器指令是怎么运行的,嘿嘿! 上一主题 | 下一主题
xy_god
中级用户

疯狂的流浪者


积分 276
发帖 56
注册 2003-9-25
状态 离线
『楼 主』:  让你看看纯机器指令是怎么运行的,嘿嘿!

;***************************************************
;初学者进阶必读之汇编程序
;作者:xy_god
;*********************堆栈段************************
STACK_SEG     SEGMENT   STACK

STACK_SEG     ENDS
;**********************数据段***********************
DATA_SEG      SEGMENT   PARA
    ABSCODE   DB 00h,0Dh,0B4h,09h,00h,0Fh;机器指令代码
              DB 0B0h,2Ah,00h,11h,0B7h,00h
              DB 00h,13h,0B3h,0DAh,00h,15h
              DB 0B9h,05h,00h,00h,18h,0CDh,10h
DATA_SEG      ENDS
;******************代码段***************************
CODE_SEG      SEGMENT   PARA
MAIN          PROC      FAR
              ASSUME    CS:CODE_SEG,DSATA_SEG
              ASSUME    SS:STACK_SEG
START:
              MOV       AX,STACK_SEG
              MOV       SS,AX
              MOV       SP,0000h
              MOV       AX,DATA_SEG
              MOV       DS,AX
;---------------非常规代码------------------
              MOV       AX,SEG ABSCODE
              PUSH      AX
              MOV       AX,OFFSET ABSCODE
              PUSH      AX
              RET
;-----------------------------------------
              MOV       AX,4C00H
              INT       21H
MAIN          ENDP      
CODE_SEG      ENDS
;******************程序结束************************
              END       START   





临河居士
http://www.xygod.pc5.org
2003-10-30 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xy_god
中级用户

疯狂的流浪者


积分 276
发帖 56
注册 2003-9-25
状态 离线
『第 2 楼』:  

说明一下,这个程序是我专门写给那些不知道机器代码是什么的人的!这个程序很简单,就是在数据段中写入相应的机器指令,然后在程序运行的时候跳入到这些机器指令当中去!



临河居士
http://www.xygod.pc5.org
2003-10-30 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xy_god
中级用户

疯狂的流浪者


积分 276
发帖 56
注册 2003-9-25
状态 离线
『第 3 楼』:  

对了,大家觉得我的程序的可读性怎么样啊?呵呵!多提宝贵意见啦!



临河居士
http://www.xygod.pc5.org
2003-10-30 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
joeguan2
初级用户




积分 146
发帖 11
注册 2003-7-29
状态 离线
『第 4 楼』:  

对于初学者,还应该对每一句进行注释

2004-5-15 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
crshen
中级用户




积分 447
发帖 126
注册 2004-2-10
状态 离线
『第 5 楼』:  

Call的寻址方式与jmp基本相同,但为了从子程序返回,该指令在跳转以前会把紧接着它的下一条指令的地址压进堆栈。如果是段内调用(目标地址是32位偏移量),则压入的也只是一个偏移量。如果是段间调用(目标地址是48位全地址),则也压入下一条指令的完全地址。同样,如果段间转移涉及优先级的变化,则有一系列复杂的保护检查。

与之对应retn/retf指令则从子程序返回。它从堆栈上取得返回地址(是call指令压进去的)并跳到该地址执行。retn取32位偏移量作段内返回,retf取48位全地址作段间返回。retn/f 还可以跟一个立即数作为操作数,该数实际上是从堆栈上传给子程序的参数的个数(以字计)返回后自动把堆栈指针esp加上指定的数*2,从而丢弃堆栈中的参数。这里具体的细节留待下一篇讲述。

虽然call和ret设计为一起工作,但它们之间没有必然的联系。就是说,如果你直接用push指令向堆栈中压入一个数,然后执行ret,他同样会把你压入的数作为返回地址,而跳到那里去执行。这种非正常的流程转移可以被用作反跟踪手段



从来不用别人的东西,要用,也先改成自己的再说!
2004-5-16 00:00
查看资料  发送邮件  发短消息 网志  OICQ (67154440)  编辑帖子  回复  引用回复
Michael
钻石会员





积分 10046
发帖 3039
注册 2002-11-11
状态 离线
『第 6 楼』:  

1010101011101010101010010101010111010101010110100101010101010101011110100101010101010101010101010101010101010101010101010101010000101010
这才叫机器指令,BD.



简单就是美
2004-5-17 00:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Backer
初级用户




积分 112
发帖 3
注册 2004-5-18
状态 离线
『第 7 楼』:  

楼主啊,这明明是汇编嘛,离机器指令还差两级跳咧。

不过在里面的数据段中还包含有机器指令,还算是符合帖意啦^_^

ret用的很巧妙

[此贴子已经被作者于2004-5-18 下午 01:10:59编辑过]




2004-5-18 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Kinglion
铂金会员

痴迷DOS者


积分 5792
发帖 1921
注册 2003-6-20
来自 金獅電腦軟體工作室
状态 离线
『第 8 楼』:  

同意第六层的意见.真正的机器码可是让人看了头痛不已的.

比如以下的十六进制代码:

   B4  30  CD  21



[此贴子已经被作者于2004-5-21 上午 11:46:09编辑过]






熟能生巧,巧能生精,一艺不精,终生无成,精亦求精,始有所成,臻于完美,永无止境!
金狮電腦軟體工作室愿竭诚为您服务!
QQ群:8393170(定期清理不发言者)
个人网站:http://www.520269.cn
电子邮件:doujiehui@vip.qq.com
微信公众号: doujiehui
2004-5-21 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (79207959)  编辑帖子  回复  引用回复
aria
高级用户




积分 924
发帖 243
注册 2003-7-9
状态 离线
『第 9 楼』:  

为什么设了一个空的堆栈段?
难道不会出问题吗?

2004-5-21 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Backer
初级用户




积分 112
发帖 3
注册 2004-5-18
状态 离线
『第 10 楼』:  

5楼已经把这个程序分析得很清楚了,有以为楼主不知道什么是机器指令的朋友,请先看看5楼的回复再说。(留神看看数据段)



2004-5-25 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
六月飞雪
高级用户

游客隐者


积分 893
发帖 201
注册 2004-4-27
状态 离线
『第 11 楼』:  

除了看不明白,其它的,都能明白



^-^     党和国家教导我们,看帖一定要回帖,做一个文明的网民.
2004-5-25 00:00
查看资料  发送邮件  发短消息 网志  OICQ (17095674)  编辑帖子  回复  引用回复
ABO
初级用户




积分 122
发帖 6
注册 2004-5-23
状态 离线
『第 12 楼』:  

非常规代码的末句为何是RET,而不是RETF.

2004-5-25 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
CrazyWind
初级用户




积分 131
发帖 12
注册 2004-3-2
状态 离线
『第 13 楼』:  

某些人,这个的确是汇编。
不过,代码已经体现了:把机器代码放到数据段,然后跳到数据段执行指令。

那么你认为什么是机器指令,要不要把微指令也一起提一下~~

2004-6-2 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
boblhh9999
中级用户




积分 316
发帖 74
注册 2004-3-4
状态 离线
『第 14 楼』:  

除了字母和数字都认识,其他的都不明白

2004-6-3 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
jihao1234567
中级用户




积分 258
发帖 58
注册 2003-10-11
状态 离线
『第 15 楼』:  

这工具没准大家用的上………………
http://jihao1234567.go.nease.net/MNEMONIX.exe
请大家用工具软件下载,开单线程。
这个东西没准有些用处。
好像是解释机器语言代码的………………



奋发向上!!!
2004-6-3 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: