首页
社区
课程
招聘
有个WIN32汇编的问题,请教各位兄弟,请进内
发表于: 2005-2-8 16:47 5874

有个WIN32汇编的问题,请教各位兄弟,请进内

2005-2-8 16:47
5874
我也有个指令不明白,需要其他兄弟指点一下,我在程序中写mov eax,[12345678h],但编译后,我用调试器看到代码变成了mov eax,12345678了,请问什么原因呢?  

我写mov eax,ds:[12345678h],编译以后就能显示mov eax,[12345678],为什么一定要指定DS的呢?不是默认都是使用DS的吗?

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

收藏
免费 0
支持
分享
最新回复 (17)
雪    币: 519
活跃值: (1223)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
2
你用的啥汇编器,MASM不是这样的吧。
2005-2-8 17:01
0
雪    币: 239
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
最初由 RoBa 发布
你用的啥汇编器,MASM不是这样的吧。


我就是使用MASM32的V8.0版本编译的,你不信,可测试一下。
2005-2-8 17:05
0
雪    币: 239
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这个问题难道没有兄弟碰到过吗,怎么没有人回答呢?
2005-2-9 15:31
0
雪    币: 204
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
试试mov eax,dword ptr [12345678h]
2005-2-9 23:17
0
雪    币: 239
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
最初由 东方弘 发布
试试mov eax,dword ptr [12345678h]


这样的写法一样不能,你也可测试一下。
2005-2-12 20:56
0
雪    币: 242
活跃值: (135)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
7
是有些不明白
.这是一点测试

.386
.model flat, stdcall
option casemap :none

include windows.inc
include user32.inc
include kernel32.inc
include masm32.inc

includelib user32.lib
includelib kernel32.lib
includelib masm32.lib
;-------------------------------------------------------

.DATA

.CODE
START:

        mov eax,[00401004h]
        mov eax,00401004h
        mov eax,dword ptr 00401004h
   mov eax,dword ptr [00401004h]
        mov eax,00401004h
        mov eax,ds:00401004h
        mov eax,ds:[00401004h]

invoke ExitProcess,0

end START

下面是od的代码
00401000 >/$  B8 04104000        mov eax,Noname1.00401004
00401005  |.  B8 04104000        mov eax,Noname1.00401004
0040100A  |.  B8 04104000        mov eax,Noname1.00401004
0040100F  |.  B8 04104000        mov eax,Noname1.00401004
00401014  |.  B8 04104000        mov eax,Noname1.00401004
00401019  |.  A1 04104000        mov eax,dword ptr ds:[401004]
0040101E   ?  A1 04104000        mov eax,dword ptr ds:[401004]
00401023   ?  6A 00              push 0
00401025   ?  E8 00000000        call <jmp.&kernel32.ExitProcess>
2005-2-12 23:35
0
雪    币: 50
活跃值: (453)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
试了试.是不行
2005-2-13 09:07
0
雪    币: 239
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我如写汇编代码mov eax,[ecx+00401004h],经过masm32编译后就能正确显示,为什么多了ecx就能,少了ecx就不可以呢?

请各位兄弟指点一下吧,实在搞不清楚我的代码错在哪?
2005-2-15 20:14
0
雪    币: 253
活跃值: (250)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
10
那应该是编译器的BUG啦
2005-2-15 22:24
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
印象中12345678是不能间接寻址的。我没学过汇编
2005-2-16 00:54
0
雪    币: 239
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
最初由 moon 发布
那应该是编译器的BUG啦


不是BUG吧,我使用MASM,TASM等编译器都有这个问题。

甚至使用VC的内联汇编,代码如下

//VC代码

_asm mov eax,[12345678h]

;使用OLLYDBG看到的代码

mov eax,12345678
2005-2-19 13:37
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
13
估计是汇编设计问题,windows是运行在保护模式的,程序读取地址必须遵守保护模式的规定,像mov eax,[xxxxxxxx]直接读取内存数据编译器分不清你要读取那个段的数据(乱读取内存会产生不可预料的错误,一般来说读取程序的内存都是通过全局变量或局部变量由编译器自动分配地址的),所以编译器自动将读取转换成送址的语句mov eax,xxxxxxxx。而你标明了ds段时是因为指明了读取ds段的xxxxxxxx内存数据。
2005-2-19 14:00
0
雪    币: 239
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
最初由 小虾 发布
估计是汇编设计问题,windows是运行在保护模式的,程序读取地址必须遵守保护模式的规定,像mov eax,[xxxxxxxx]直接读取内存数据编译器分不清你要读取那个段的数据(乱读取内存会产生不可预料的错误,一般来说读取程序的内存都是通过全局变量或局部变量由编译器自动分配地址的),所以编译器自动将读取转换成送址的语句mov eax,xxxxxxxx。而你标明了ds段时是因为指明了读取ds段的xxxxxxxx内存数据。


再请教一下
mov eax,[ecx+12345678h]
就能默认读DS段呢?
2005-2-19 14:37
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
15
最初由 dssz 发布


再请教一下
mov eax,[ecx+12345678h]
就能默认读DS段呢?

这个属于间接读取,不是属于直接读取。这时的xxxxxxxx是属于偏移址。
2005-2-19 14:40
0
雪    币: 239
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
最初由 小虾 发布

这个属于间接读取,不是属于直接读取。这时的xxxxxxxx是属于偏移址。


关于这个问题,应该和保护模式没有关系的,我使用MASM6.0的编译器,编译16位程序的也有这种情况出现。

例如
mov ax,[1234]

编译后变成
mov ax,1234
2005-2-19 14:48
0
雪    币: 162
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
是不是编译时默认段只针对寄存器?
2005-2-19 21:19
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
最初由 dssz 发布


关于这个问题,应该和保护模式没有关系的,我使用MASM6.0的编译器,编译16位程序的也有这种情况出现。

例如
........


mov ax,[var].这是直接寻址,var是个变量
mov ax,var是一样的,写法不同而已
2005-2-19 23:21
0
游客
登录 | 注册 方可回帖
返回
//