- 论坛徽章:
- 0
|
没看懂楼主是什么意思,lz这个是masm的汇编??感觉LZ把32位的call指令弄错了.
call指令的几种区别.
relative是以当前指令结束时的EIP为参考地址,absolute指绝对地址.
rel32=立即数
r32=寄存器
m32=内存访问(指针)
机器码 指令 说明
E8 cd CALL rel32 Call near, relative, displacement relative to next instruction
FF /2 CALL r/m32 Call near, absolute indirect, address given in r/m32
9A cp CALL ptr16:32 Call far, absolute, address given in operand
FF /3 CALL m16:32 Call far, absolute indirect, address given in m16:32
表格取自intel开发者文档第二卷的指令手册
也就是说
call function 相对地址
mov eax,function
call eax 绝对地址
不要看到call c000000h就以为是绝对跳转,汇编器会做地址转换,并且生成一个重定位项,链接器在链接时对其进行重定位.
可以做一个简单的实验.
test1.asm call 1000h
test2.asm nop nop nop nop call 1000h
编译--反编译对比一下机器码. |
|