这段代码问题之前有人问过了,我有几个地方还是有一点困惑
1
call @f
换成push @f或者push offset @f 对不对
2
sub ebx,offset@B
换成
sub ebx,@B
对不对
按说 这里 加offset 和不加是一样的 因为@F是标号 编译器对标号的默认是取偏移量(我也不确定 貌似是)
则
对于2 等价 对于1 两个写法等效
那对不对呢?
貌似不对诶
为嘛还是看机器码
我把这几种都贴出来
push offset @F
@@:
pop ebx
sub ebx,offset @B
00401000 >
68 05104000
PUSH GUI.00401005
00401005
5B
POP EBX
00401006
81EB 05104000
SUB EBX,GUI.00401005
push @F
@@:
pop ebx
sub ebx,offset @B
00401000 >
68 05104000
PUSH GUI.00401005
00401005
5B
POP EBX
00401006
81EB 05104000
SUB EBX,GUI.00401005
push @F
@@:
pop ebx
sub ebx,@B
00401000 >
68 05104000
PUSH GUI.00401005
00401005
5B
POP EBX
00401006
81EB 05104000
SUB EBX,GUI.00401005
自己看啦
为嘛不行啊 因为机器码中已经包含了地址了 也就是 05104000 你把它复制到其他地方 指令的内容 不会变 于是 这个偏移量不会变~
故而 不行