首页
社区
课程
招聘
本人学习Win32Asm汇编有些困惑
发表于: 2005-9-9 15:15 6533

本人学习Win32Asm汇编有些困惑

2005-9-9 15:15
6533
定义一个变量
_hInstance dd ?

通常可以这样做:
mov _hInstance,eax

但像下面这样做又是何意思呢?
mov [_hInstance],eax

又跟mov [offset _hInstance],eax有何不同??

尤其在自定位代码经常看到:
         call @F
         @@:
         pop ebx
         sub ebx,offset @B

            mov [ebx+_hInstance],eax

加[]以及不加似乎一样,但又有些差导,不知哪位可以解释一下??

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 207
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
可以这么理解,加[]的是间接寻址,[]里面的就相当于一个指针。
这个指针就像C语言里面的一样:
int x = 5;
int *p;
p = &x; //*p = 5
2005-9-10 19:12
0
雪    币: 239
活跃值: (20)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
可是想问的是在我所贴的代码里,加[]与不加[]是乎没什么区别,我想知道原因!!
2005-9-10 23:09
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
罗云彬的WIN32汇编,第3章数据结构里面稍微讲了一下,可以参考。定义的变量是指针结构。  罗云彬的书虽然讲的详细,不过起点稍微有点高。再找本X86到WIN32的入门书一起看,效果最好了
2005-9-11 00:51
0
雪    币: 207
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
最初由 Steve 发布
定义一个变量
_hInstance dd ?

通常可以这样做:
mov _hInstance,eax

但像下面这样做又是何意思呢?
mov [_hInstance],eax

又跟mov [offset _hInstance],eax有何不同??

尤其在自定位代码经常看到:
call @F
@@:
pop ebx
sub ebx,offset @B

mov [ebx+_hInstance],eax

假设eax = 1;
则mov _hInstance, eax后, _hInstance = 1
在mov [_hInstance], eax中, _hInstance成了一个指针,即现在这个1成了一个地址,mov [_hInstance], eax就是说把eax的值赋到地址为1的地方。
而mov [offet _hInstance], eax也一样,假设offset _hInstance = 0x12345678,那这句代码的意思就是把eax的值赋到地址0x12345678处。你只要把[]中的东东理解为一个指针就OK了。
2005-9-11 01:30
0
雪    币: 117
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
就是,罗云彬的书是假设了你有8086汇编基础的。
这是8086汇编的几种基本寻址方式之一
当然,win32汇编也一样的是这几种寻址方式
2005-9-11 12:03
0
雪    币: 239
活跃值: (20)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
谢谢大家.

后来我测试了下,发现:
mov [offset _hInstance],eax

这句是不能通过编译.(使用masm)
2005-9-11 17:15
0
雪    币: 239
活跃值: (20)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
我总结了下:

定义一个变量名:

hInstance  dd ?

那么就可以把hInstance当做一个整体,

也可以把hInstance当做一个标号使用.
2005-9-11 17:27
0
游客
登录 | 注册 方可回帖
返回
//