主题:请问高手.这是什么意思.
digital1010
[专家分:1430] 发布于 2008-09-08 22:41:00
newread proc hFile:DWORD,pBuffer:DWORD,NumBytes:DWORD,pBytesRead:DWORD
invoke ReadFile,hFile,pBuffer,NumBytes,pBytesRead,0
xor eax,1 //这行是什么意思.
ret
newread endp
push [edi].NextLink 这两行又是指什么.
pop edi
PUSH和POP有什么作用.可否详细回答.
比如这段代码.我知道.懂汇编的朋友这是小问题,但我不太清楚,希望高手帮帮我.先谢过
push eax
pop [esi].WordLen
回复列表 (共5个回复)
沙发
苏州本是 [专家分:0] 发布于 2008-09-09 09:35:00
如果eax=1,xor eax,1后,eax=0;
如果eax=0,xor eax,1后,eax=1,
所以常用来切换开关。
push a,pop b的作用是等于mov b,a。
push [edi].NextLink
pop edi
是取edi+NextLink在某结构中的偏移地址处的字单元内容,放到edi内存地址中。
push eax
pop [esi].WordLen
是取eax的值,放到esi+WordLen在某结构中的偏移地址处的字单元中。
板凳
digital1010 [专家分:1430] 发布于 2008-09-10 10:04:00
还有一个问题请问高手,
那怎样知道汇编的子程序有没有返回值,就如同高级语言的过程和函数一样。
3 楼
digital1010 [专家分:1430] 发布于 2008-09-10 10:21:00
newread proc hFile:DWORD,pBuffer:DWORD,NumBytes:DWORD,pBytesRead:DWORD
invoke ReadFile,hFile,pBuffer,NumBytes,pBytesRead,0
xor eax,1 //这行是什么意思.
ret
newread endp
难道这段 READFILE为真是EAX就是假吗。
4 楼
cnhanxiao [专家分:450] 发布于 2008-09-19 02:30:00
1楼回答正确。
至于为何要与或一下,我也很纳闷,读就读了,返回值在eax中,为0则失败。统一错误代码?
后面的问题就是利用堆栈进行数据转存而已
5 楼
cnhanxiao [专家分:450] 发布于 2008-09-19 13:05:00
[size=4][color=000080]新:影响标志寄存器标志位的可能性最大——调用程序可以根据JZ、JNZ做出相应动作,而不用再根据eax返回值做出判定。挺好的办法。
push [edi].NextLink
pop edi
你看看数据结构就明白了。其实就是压栈结构中的NextLink,赋值给edi。后面类似。(今天才细看了后面这个问题,呵呵)[/color][/size]
我来回复