关于XOR的用法 求教一段汇编
MOV ESI,DWORD PTR SS:[EBP-4]
XOR ESI,DWORD PTR SS:[EBP-8]
CALL DWORD PTR DS:[<&KERNEL32.GetCurrentProcessId>]
XOR ESI,EAX
CALL DWORD PTR DS:[<&KERNEL32.GetCurrentThreadId>]
XOR ESI,EAX
CALL DWORD PTR DS:[<&KERNEL32.GetTickCount>]
XOR ESI,EAX
LEA EAX,DWORD PTR SS:[EBP-10]
这里XOR具体起什么作用
我来说明下:
DWORD PTR SS:[EBP-4],DWORD PTR SS:[EBP-8]保存的是一个64位的值,这个值是由函数GetSystemTimeAsFileTime得到的,具体可以参看FILETIME结构
然后,
在“MOV ESI,DWORD PTR SS:[EBP-4]”这句执行前,ESI的值是FFFFFFFF;
这个64位的值应该是代表一个时间,可我搞不懂为什么要让时间这个值本身去XOR
比如XOR DATE, TIME -。- 这到底有啥用呢
还有就是,看后面几段代码:
CALL DWORD PTR DS:[<&KERNEL32.GetCurrentProcessId>]
XOR ESI,EAX
CALL DWORD PTR DS:[<&KERNEL32.GetCurrentThreadId>]
XOR ESI,EAX
CALL DWORD PTR DS:[<&KERNEL32.GetTickCount>]
XOR ESI,EAX
CALL完第一个是得到进程ID,一般这个值会返回给EAX
也就是说,后面的一句可以看成,XOR ESI, 进程ID
以此类对,后面几句都可以这样看,XOR ESI, 线程ID
等等。。。
我知道XOR是异或的意思,但看不明白这里用异或啥意思? 加密? 加密一般密钥是不变的呀。这里一会进程ID,一会线程ID
跪求ING~~~
[解决办法]
从最后的 GetTickCount() 来看,应该是想生成一个随机数
[解决办法]
应该是生成随机数,不过这个算法随机性恐怕很难保证...