首页
社区
课程
招聘
[求助]关于汇编的2个小问题
发表于: 2008-3-13 18:16 3618

[求助]关于汇编的2个小问题

2008-3-13 18:16
3618
问题一 :
CALL DWORD PTR [XXXXXXXX]
CALL XXXXXXXX
弱弱的问句:
这两条指令有区别吗 ?

问题二:
当内嵌asm在c中时,e.g:
__asm
{
call 0x00400000h
}报错
但是如果先把0x00400000h传给eax 然后 call eax 就ok了
其中原因是啥呢?是不是因为0x400000h为相对地址,不能直接用call?

先说声谢谢

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 50161
活跃值: (20610)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
这2上CALLOD里实际看看就清楚了,如:
call    dword ptr [40702C]
0040702C >7C8111FA  kernel32.GetVersion

如是call    40702C,类似jmp 40702C(只是没压栈)
2008-3-13 20:46
0
雪    币: 105
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
1 寻址方式不同
CALL DWORD PTR [XXXXXXXX] 为间接寻址
CALL XXXXXXXX 为相对寻址 相对于EIP
2 不可以。由于编译时无法正确定位你的代码所在的地址位置,故无法直接计算出相对于EIP的偏移量,所以会编译时报错。
2008-3-13 21:00
0
雪    币: 171
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
very sorry  
问题一  果然问的有水平 。。。。
脑袋被搞晕了....莫名的认为"[]"等价于一个指针,dword ptr 又等价于一个指针

关于问题二
我总认为 内嵌的汇编程序 会原样嵌在c所生成的汇编程序的相应位置
看了pcasa兄的解释 仍有些不明白
我 回头再查下资料

谢谢楼上两位指点 :)
2008-3-13 21:43
0
游客
登录 | 注册 方可回帖
返回
//