首页
社区
课程
招聘
汇编问题请教高人。。
2006-7-8 18:42 9042

汇编问题请教高人。。

2006-7-8 18:42
9042
请教大虾们 MOV EAX 00400000h 和 MOV EAX [00400000h]有什么区别,能不能很系统的写出来让我们明白啊?

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞7
打赏
分享
最新回复 (21)
雪    币: 11704
活跃值: (966)
能力值: ( LV12,RANK:779 )
在线值:
发帖
回帖
粉丝
readyu 12 2006-7-8 19:07
2
0
前者是立即数,数值就是00400000H

后者是直接寻址,数值在内存[00400000h]
并且应该加上word ptr ,byte ptr表示占用字节大小的。
[00400000h]只是地址而没有说明字节大小。

最初由 cuichangra 发布
请教大虾们 MOV EAX 00400000h 和 MOV EAX [00400000h]有什么区别,能不能很系统的写出来让我们明白啊?
雪    币: 11704
活跃值: (966)
能力值: ( LV12,RANK:779 )
在线值:
发帖
回帖
粉丝
readyu 12 2006-7-8 19:11
3
0
不小心回了2篇。ft
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cuichangra 2006-7-9 11:48
4
0
偶还不是很懂,能不能很系统地介绍下带[]和不带[]的具体意思?
雪    币: 179
活跃值: (131)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
WAKU 7 2006-7-9 11:59
5
0
MOV EAX 00400000h
就是把00400000h这个数赋给EAX
MOV EAX [00400000h]
是把内存中地址为00400000h的值给EAX

[]有点像C语言指针取值符号*

就这么点东西,再系统只能看书了
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xszhou 2006-7-10 11:10
6
0
没必要加上word ptr ,byte ptr
雪    币: 194
活跃值: (71)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
fangxin 2006-7-10 14:08
7
0
呵呵, 还是多看看书好
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cuichangra 2006-7-11 07:08
8
0
那MOV EAX [ESI]哪? 是把ESI指向的地址给EAX,而不是那个地址指向的值给EAX?
            谢谢!
雪    币: 1334
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Ivanov 2006-7-11 08:40
9
0
突然发现我解释得比较绕嘴,我编辑一下

不带括号指的是 立即数,也就是直接参与运算的数;

如果带上括号,那么括号里面的数就变成了地址,也就是说 它不再是直接参与运算的数了,它成为了一个地址,参与运算的将是这个“地址”里所包含的数;

由此可以看出, [ ] 就是一个彻底改变 数 性质的符号,它将 括号里面的数变成了一个 地址指针;
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cuichangra 2006-7-16 02:41
10
0
谁帮忙推荐几本汇编的宝书???谢谢
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cuichangra 2006-7-16 22:46
11
0
没有人推荐吗?另外请教下
  00401221  MOV BL,[EAX]
  00401223  ROL EBX,08    //此处的08是什么意思?
  00401226  ADD EDX,EBX
  00401228  INC EAX
  00401229  CMP BYTE PTR[EAX],00   
  0040122C  JNZ 00401221
  这是SOFTICE显示的内容,意思是把我输入的注册号循环左移,情况如下:
    比如我输入的是123456
    00 00 31 00
    00 31 32 00
    31 32 33 00
    32 33 34 31
    33 34 35 32
  + 34 35 36 33  
------------------------
    CB 00 35 96
   有没有办法进行逆运算求出注册码?
雪    币: 4
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
燕北飞 2006-7-16 22:50
12
0
最初由 cuichangra 发布
谁帮忙推荐几本汇编的宝书???谢谢

王爽的书 很好的 《汇编语言》
雪    币: 207
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
njzzzzzz 2006-7-17 02:13
13
0
最初由 cuichangra 发布
没有人推荐吗?另外请教下
00401221 MOV BL,[EAX]
00401223 ROL EBX,08 //此处的08是什么意思?
00401226 ADD EDX,EBX
00401228 INC EAX
........


三、逻辑运算指令
───────────────────────────────────────
          AND    与运算.
        OR      或运算.
        XOR    异或运算.
        NOT    取反.
        TEST    测试.(两操作数作与运算,仅修改标志位,不回送结果).
        SHL    逻辑左移.
        SAL    算术左移.(=SHL)
        SHR    逻辑右移.
        SAR    算术右移.(=SHR)
        ROL    循环左移.
        ROR    循环右移.
        RCL    通过进位的循环左移.
        RCR    通过进位的循环右移.
          以上八种移位指令,其移位次数可达255次.
              移位一次时, 可直接用操作码.  如 SHL AX,1.
              移位>1次时, 则由寄存器CL给出移位次数.
                如  MOV CL,04
                    SHL AX,CL

下载这个文件学学http://www.pediy.com/essay/Crack2001.zip
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
casn 2006-7-19 12:09
14
0
  以上各位坛友所云在理论上都是正确的,但实际上两种写法没有任何差别:
  一、两种写法分别或同时编译、连接再反汇编,一见便晓;
  二、详见王爽《汇编语言》第102页。
雪    币: 1334
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Ivanov 2006-7-19 12:49
15
0
最初由 casn 发布
  以上各位坛友所云在理论上都是正确的,但实际上两种写法没有任何差别:
  一、两种写法分别或同时编译、连接再反汇编,一见便晓;
  二、详见王爽《汇编语言》第102页。


什么意思? 什么叫实际上两种写法没有任何差别?
王爽的书是不用看的,直接看intel的手册或是编译器官方帮助不是更好

但我没明白,你的那个 一,两种写法分别或同时编译、连接再反汇编,一见便晓;

第一个立即数; 但第二个是地址呀,根本不是一个概念, 你说的 将两句编译后再看,调试器上的反汇编语句,那当然一样了, 因为第二句是间接寻址,只不过那个数不是立即数,而是从堆栈地址中的一个数;
雪    币: 291
活跃值: (208)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
thebutterfly 5 2006-7-20 10:44
16
0
系统总结:

(A)在调试器中
mov eax, 00400000h     (a)
意思是把00400000h这个立即数送入eax寄存器, 执行后eax存放有数00400000h
mov eax, [00400000h]   (b)
调试器基本上见不到这种写法,通常是
mov eax, DWORD PTR [00400000h]  (c)
因为写法(b)不能体现存储单元的大小
意思为把内存单元00400000h开始的双字送入eax
如果00400000h存有78h,00400001h存有56h,下面两个单元依次存放有34h和12h, 那么eax中最后是12345678h

(B)在MASM编译环境中
我们测试3条语句
mov        eax, DWORD PTR [00400000h]
mov        eax, WORD PTR [00400000h]
mov        eax, 00400000h
的编译结果
结果是:
0040104B   |.  B8 00004000   mov eax,00400000
00401050   |.  B8 00004000   mov eax,00400000
00401055   |.  B8 00004000   mov eax,00400000
这个结果非常令人惊异!
令人惊异之处有两点:
1.第2句(mov eax, WORD PTR [00400000h])竟然编译通过?!
2.三句编译结果竟然完全相同!从生成的机器码中可以看出

所以casn朋友的说法是正确的
总结一下,

1.在MASM中, 形如  [立即数] 或者 [地址标号] 的语句, MASM从来都是无视方括号的存在, 直接把它作为立即数看待, 即使加上PTR也如此
2.形如 [数据标号] 的语句, MASM从来也都是无视方括号存在, 但是这一回却总把它编译为取括号中地址的内容, 即使不加方括号, 还是会取地址的内容
3.一旦方括号中有寄存器, 那么方括号就会发挥它应该有的作用, MASM再也不会无视方括号了

规律1的例子:
mov eax, [00400000h]

loc:
mov  eax, [loc]

等价于
mov eax, 00400000h
(如果loc的地址就是00400000h)

规律2的例子
a   dd   5
mov  eax, [a]

等价于
mov  eax, a
最后eax = 5

规律3的例子
mov eax, [ebx]

和mov  eax, ebx
明显是不同的
雪    币: 1334
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Ivanov 2006-7-20 12:49
17
0
最初由 thebutterfly 发布
这个结果非常令人惊异!
令人惊异之处有两点:
1.第2句(mov eax, WORD PTR [00400000h])竟然编译通过?!
2.三句编译结果竟然完全相同!从生成的机器码中可以看出

所以casn朋友的说法是正确的
总结一下,

1.在MASM中, 形如 [立即数] 或者 [地址标号] 的语句, MASM从来都是无视方括号的存在, 直接把它作为立即数看待, 即使加上PTR也如此
2.形如 [数据标号] 的语句, MASM从来也都是无视方括号存在, 但是这一回却总把它编译为取括号中地址的内容, 即使不加方括号, 还是会取地址的内容
3.一旦方括号中有寄存器, 那么方括号就会发挥它应该有的作用, MASM再也不会无视方括号了


这叫什么总结?
只能说masm的"智能优化"有巨大的问题存在,
并不代表上面的 mov eax 00400000h 和 mov eax [00400000h] 是一回事;

例如, 你使用 nasm 来 编译 mov eax 00400000h 和 mov eax [00400000h];
然后再用调试器来看它们的结果
也可以用 GAS来编译:

movl $0x40000,%eax   和  movl (0x40000), %eax   

我怎么就不相信 这两句是一回子事呢
雪    币: 236
活跃值: (326)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
gzgzlxg 11 2006-7-20 13:02
18
0
masm编译器一直被认为是语法不严格的东西,从它诞生那一天起就是如此,而且永远也不改正。这就是老盖的个性,我是老大,我怕谁,我就是不区分有括号和没有括号,你爱喜欢不喜欢,你爱使用不使用。
雪    币: 291
活跃值: (208)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
thebutterfly 5 2006-7-20 18:44
19
0
MASM有很多让人看不懂的东西, 却一直没有修正过

顺便说说, 如果确实要取某固定地址(例如00400000h)的内容也不难,只需要用
mov eax, DS:[00400000h]
或者
mov eax, DS:00400000h
就可以了
两句编译结果相同
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
w三二dasm 2006-7-22 11:47
20
0
最初由 Ivanov 发布
这叫什么总结?
只能说masm的"智能优化"有巨大的问题存在,
并不代表上面的 mov eax 00400000h 和 mov eax [00400000h] 是一回事;

例如, 你使用Ivanov 来 编译 mov eax 00400000h 和 mov eax [00400000h];
........
雪    币: 1334
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Ivanov 2006-7-22 16:17
21
0
最初由 w三二dasm 发布
例如, 你使用Ivanov 来 编译 mov eax 00400000h 和 mov eax [00400000h];


哈哈
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
w三二dasm 2006-7-23 14:00
22
0
游客
登录 | 注册 方可回帖
返回