能力值:
( LV2,RANK:10 )
|
-
-
2 楼
在编译时。数字好像一般不直接认为是地址。
所以:
数字加【】没有意义,不像寄存器。
所以,编译时会去掉中括号。
jmp后面也不能跟单独的数字。
所以不能jmp 004*
不行你就试试TASM。
别把编译器想得那么智能。你这完全是在调戏他们。。。
你要是这样,就用机器码编程得了。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
MOV ECX,DWORD PTR ds:[01BBD028h]
JMP 00401000
因为编译的时候无法得知当前的地址是啥
mov eax,401000h
jmp eax
or
push 401000h
ret
|
能力值:
( LV3,RANK:20 )
|
-
-
4 楼
MOV ECX,DWORD PTR [01BBD028h]
这语句是不可以通过编译的,因为编译器不知道[01BBD028h]是否为有效地址。
JMP 00401000
跳转语句中的立即数地址只能是相对地址,而不是绝对地址,所以你只有用你所说的方法,或者你在程序开头处设个标记,例如:loop1:
然后,JUMP处改为 jmp loop1
|
能力值:
( LV3,RANK:20 )
|
-
-
5 楼
当然,你也可以用3楼所说的方法
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
额,他只是在问为什么。
我想他还是知道那么基本的方法的。。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
[QUOTE=liuyq;775749]MOV ECX,DWORD PTR [01BBD028h]
这语句是不可以通过编译的,因为编译器不知道[01BBD028h]是否为有效地址。
JMP 00401000
跳转语句中的立即数地址只能是相对地址,而不是绝对地址,所以你只有用你所说的方法,或者你在程序开头处设个标记,例如:loop1:...[/QUOTE]
事实上这句编译能通过,只是编译后自动被修改了。
|
能力值:
( LV3,RANK:20 )
|
-
-
8 楼
说明它是错误编译啊
|
|
|