首页
社区
课程
招聘
[已解决]初学汇编的两个问题
2006-9-8 18:51 4559

[已解决]初学汇编的两个问题

2006-9-8 18:51
4559
下列的问题请大哥们别笑..

我是按着论坛的指引买了本"IBM-PC汇编语言"和"windows编程"还有论坛出的"加密与解密"想学习破解的...

同时下载了MASM..但看了汇编一段时间了..但小弟还不知道..怎么用MASM编写汇编程呢...解压后..我全部的图标都双击试过了..但没有一个像TC那样编写程序的窗口..现在很郁闷..根本上不了机...麻烦大大们指点一下..到底怎样做...

还有就一条问题就是

关于段间直接寻址的问题...如:

JMP FAR PTR NEXTROUTINT

NEXTROUTINT这个位移量..是存放在代码段本指令后的单元里..那么NEXTROUTINT如果在16位指令里..是不是一个32位数呢???如果32位指令那么是不是一个64位二进制数呢???如果不是那么怎么分到IP,CS或EIP,CS里呢???这里有点乱...

NEXTROUTINT到底是符号地址还是符号常数呢???这些概念也有点乱...

望大大们详细点给小弟解释一下好吗?..先谢谢了..

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞0
打赏
分享
最新回复 (12)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
淡淡流水 2006-9-8 23:39
2
0
那位大哥..帮忙解决一下..谢谢
雪    币: 251
活跃值: (250)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
moon 5 2006-9-9 10:40
3
0
在MASM32里面是用这个:QEDITOR.EXE

在你的程序里面,NEXTROUTINT就是一个标号而已,是随意起的名字。比如:

XXXXXXXX
jmp j1
XXXXXXXX
...............
j1:
XXXXXXXX
雪    币: 291
活跃值: (208)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
thebutterfly 5 2006-9-9 13:02
4
0
1.用文本编辑器写汇编程序, 然后用MASM编译, 那个QEDITOR.exe是MASM32软件包中的东东, 如果是MASM5.0之前的版本是没有的
2.先说说全指针
跨段转移的指令会用到所谓全指针, 格式  段/段选择子:偏移, 16位代码中, 指针是32位(16位段值+16位偏移), 在32位代码中, 指针是48位的(16+32位偏移), 例如
16位例子
0000h:1347h
32位例子
0008h:FFD0C700h

远转移指令用的是全指针, 指令格式:
;jmp far ptr xxxx
;16位格式
DB  0EAh  ;指令码
DW  Offset;段内偏移
DW  seg   ;段值
;32位格式
DB  0EAh  ;指令码
DD  Offset;32位偏移
DW  set   ;段选择子
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
淡淡流水 2006-9-9 16:22
5
0
最初由 thebutterfly 发布
1.用文本编辑器写汇编程序, 然后用MASM编译, 那个QEDITOR.exe是MASM32软件包中的东东, 如果是MASM5.0之前的版本是没有的
2.先说说全指针
跨段转移的指令会用到所谓全指针, 格式 段/段选择子:偏移, 16位代码中, 指针是32位(16位段值+16位偏移), 在32位代码中, 指针是48位的(16+32位偏移), 例如
16位例子
0000h:1347h
........


先谢谢楼上两位...

那么这个标号..是不是自己定义的数..像C一样..int i 1000;

这个标号的值就是1000...存在代码段OP之后..1000是用48位存起来或是以32位存起来???然后执行JMP....

还是在定义是像thebutterfly给出的那样...

在定义是写成...0000h:1347h这样的格式..存储时0000h和1347h各占16位??

不知道这样理解对不对???
雪    币: 291
活跃值: (208)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
thebutterfly 5 2006-9-9 16:34
6
0
我说的是指令被汇编后的形式, 不是在源代码中的定义

在源代码中只有标号, 不会出现类似于0000h:1347h之类的指针的

如果跳到标号引用的地址的过程是一个远跳转, 汇编器会自动汇编成全指针的
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
淡淡流水 2006-9-9 16:40
7
0
最初由 thebutterfly 发布
我说的是指令被汇编后的形式, 不是在源代码中的定义

在源代码中只有标号, 不会出现类似于0000h:1347h之类的指针的

如果跳到标号引用的地址的过程是一个远跳转, 汇编器会自动汇编成全指针的


哦..这样啊...那么..在源代码中的时候...应该怎样去定义这个标号呢???

总该要有个定义吧..不然..怎么知道..要跳到那里去???
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
非安全 17 2006-9-9 16:52
8
0
怎么用MASM编写汇编程呢?

我推荐使用"RadASM 2.2.0.9汉化版"(汇编集成开发工具)配合使用

相当于一个IDE

下载页面:http://www.pediy.com/tools/Compilers.htm
雪    币: 291
活跃值: (208)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
thebutterfly 5 2006-9-9 16:55
9
0
在不同的段中定义标号, 例如:
CODE1 SEGMENT USE16
     
    ......
    jmp far ptr TGT
    ......
RETURN::
    ......
CODE1 ENDS

CODE2 SEGMENT USE16
     
     ......
TGT::
     ......
     jmp far ptr RETURN     
CODE2 ENDS

一定要是跨段的转移(jmp或者call)才会被汇编成远跳转, 使用全指针
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
淡淡流水 2006-9-9 17:08
10
0
最初由 thebutterfly 发布
在不同的段中定义标号, 例如:
CODE1 SEGMENT USE16

......
jmp far ptr TGT
........


哦..看了你的例子..再找了些资料..大概明白了..谢谢你的帮忙...
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
风流才子 2006-9-10 12:14
11
0
http://www.orsoon.com/Software/catalog163/5386.html
给个下载的地址,你可以去看看这本书。
下载也很快哟,肯定值得一看!
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
淡淡流水 2006-9-10 18:27
12
0
最初由 风流才子 发布
http://www.orsoon.com/Software/catalog163/5386.html
给个下载的地址,你可以去看看这本书。
下载也很快哟,肯定值得一看!


太感谢了...看雪的大大们真的很热情...谢谢楼上的各位给小弟的帮忙...谢谢
雪    币: 209
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wysea 2006-9-13 16:54
13
0
用 “masm for windows 集成实验环境 v6.0 ”吧!
很好用的,界面也很好看!
只是这个软件需要注册!
下载地址是:
http://download.it168.com/07/0714/36289/36289_4.shtml
游客
登录 | 注册 方可回帖
返回