志志志志志志 发表于 2014-3-5 11:20:48

win32汇编中的一些疑问

win32汇编的 罗云彬版本13.4.2讲到自定位问题中远程示例的问题

;********************************************************************
; 查找文件管理器窗口并获取进程ID,然后打开进程
;********************************************************************
                invoke        FindWindow,addr szDesktopClass,addr szDesktopWindow
                invoke        GetWindowThreadProcessId,eax,offset dwProcessID
                mov        dwThreadID,eax
                invoke        OpenProcess,PROCESS_CREATE_THREAD or PROCESS_VM_OPERATION or \
                        PROCESS_VM_WRITE,FALSE,dwProcessID
                .if        eax
                        mov        hProcess,eax
;********************************************************************
; 在进程中分配空间并将执行代码拷贝过去,然后创建一个远程线程
;********************************************************************
                        invoke        VirtualAllocEx,hProcess,NULL,REMOTE_CODE_LENGTH,MEM_COMMIT,PAGE_EXECUTE_READWRITE
                        .if        eax
                                mov        lpRemoteCode,eax
                                invoke        WriteProcessMemory,hProcess,lpRemoteCode,\
                                        offset REMOTE_CODE_START,REMOTE_CODE_LENGTH,NULL
                                invoke        WriteProcessMemory,hProcess,lpRemoteCode,\
                                        offset lpLoadLibrary,sizeof dword * 3,NULL
                                mov        eax,lpRemoteCode
                                add        eax,offset _RemoteThread - offset REMOTE_CODE_START
                                invoke        CreateRemoteThread,hProcess,NULL,0,eax,0,0,NULL
                                invoke        CloseHandle,eax
                        .endif
                        invoke        CloseHandle,hProcess
                .else
                        invoke        MessageBox,NULL,addr szErrOpen,NULL,MB_OK or MB_ICONWARNING
                .endif
                invoke        ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

代码若上图
为什么要写两次内存?
                              mov        lpRemoteCode,eax
                                invoke        WriteProcessMemory,hProcess,lpRemoteCode,\
                                        offset REMOTE_CODE_START,REMOTE_CODE_LENGTH,NULL
                                invoke        WriteProcessMemory,hProcess,lpRemoteCode,\
                                        offset lpLoadLibrary,sizeof dword * 3,NULL
                                mov        eax,lpRemoteCode

前后的mov lpRemoteCode,eax;   mov eax,lpRemoteCode是为什么求大牛解答!

志志志志志志 发表于 2014-3-5 11:58:45

我好像知道为什么了!
页: [1]
查看完整版本: win32汇编中的一些疑问