回 帖 发 新 帖 刷新版面

主题:请问高手.这是什么意思.

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个回复)

沙发

如果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在某结构中的偏移地址处的字单元中。

板凳


还有一个问题请问高手,
那怎样知道汇编的子程序有没有返回值,就如同高级语言的过程和函数一样。

3 楼


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 楼

1楼回答正确。

至于为何要与或一下,我也很纳闷,读就读了,返回值在eax中,为0则失败。统一错误代码?

后面的问题就是利用堆栈进行数据转存而已

5 楼

[size=4][color=000080]新:影响标志寄存器标志位的可能性最大——调用程序可以根据JZ、JNZ做出相应动作,而不用再根据eax返回值做出判定。挺好的办法。

 push [edi].NextLink
 pop edi
你看看数据结构就明白了。其实就是压栈结构中的NextLink,赋值给edi。后面类似。(今天才细看了后面这个问题,呵呵)[/color][/size]

我来回复

您尚未登录,请登录后再回复。点此登录或注册