能力值:
( LV2,RANK:10 )
|
-
-
2 楼
通常寄存器的用法,每?compiler都不一?.但是在windows的API奄,ebx,esi,edi,ebp是不??的.eax一定是用?作return value.而Microsoft的c/c++ compiler通常?用ecx?作*this pointer.
|
能力值:
( LV12,RANK:450 )
|
-
-
3 楼
用之前
pushad
用完后
popad
这样除了esp,其它寄存器都可以使用
如果你想要使用某个寄存器,可以先将它压栈。
比如
push ebx
用完后
pop ebx
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
我用的是masm32汇编,编译器是自带的ml,昨天那程序,我试了用edx,ecx,esi,edi,能够正常得到结果的只有esi,edi
我想这个错误应该和压栈没有关系,可能是API内部的实现过程中,调用了edx和ecx作为值传递,而涵数返回后没有恢复到我们设的值,所以才产生的错误
|
能力值:
(RANK:410 )
|
-
-
5 楼
eax、edx和ecx在调用API函数时都有可能会被改变,而esi、edi、ebp、ebx寄存器API是不会改变他们的值的。所以如果你要调用API,eax、ecx、edx的值你必须先保存一下或转到edi、esi、ebx、ebp里。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
明白了,谢谢
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
看了上面的帖子,我也学到一点东西了!
|
能力值:
( LV4,RANK:50 )
|
-
-
8 楼
ebx edi esi三个寄存器使用应慎重.
除以上各位所说外,不同操作系统对他们的处理也不同,如98/xp.
倘若没有把握,可以在过程或函数定义中用proc uses ebx edi esi进行保护.
|
|
|