我需要用匯編訪問WinMain
參數,但我似乎並沒有能夠儘管我理應知道這樣做的,他們是在棧(DWORD偏移量爲0〜 16和0到20時,在操作前推動EBP)。下面還有用於顯示lpszCmdline
字符串包含該程序的命令行的例子,但它似乎總是包含0,所以什麼也不顯示。如果我嘗試在彙編代碼中使用其他參數,則不會出現有效的字符串指針,並且/或者程序會按預期崩潰。彙編程序:獲得的Win32的WinMain函數的棧參數
;[esp+20]==nCmdShow
;[esp+16]==lpszCmdLine
;[esp+12]==0 in win32
;[esp+8]==hInst
;[esp+4]==EIP
;[esp+0]==EBP
push ebp
mov ebp,esp
mov eax,[ebp+16]
push dword 0x00001030 ;UINT uType
push eax ;LPCTSTR lpCaption
push eax ;LPCTSTR lpText
push dword 0 ;HWND hWnd
call dword[[email protected]]
pop ebp
但是,如果我用我能得到一個有效的指針到命令行字符串,並顯示。
call dword[[email protected]]
push dword 0x00001030 ;UINT uType
push eax ;LPCTSTR lpCaption
push eax ;LPCTSTR lpText
push dword 0 ;HWND hWnd
call dword[[email protected]]
哪裏的第一個代碼塊中的錯誤?我需要做什麼來獲取參數,並能夠實現我自己的代碼返回一個有效的指針lpszCmdLine
就像,因此,其他WinMain
參數?如果我不能從堆棧獲取命令行指針,那麼我想大概無法獲得其他重要初始化參數,如nCmdShow
。
請讓我知道如果你需要比上面提供了更多的代碼。如果它對你有用,知道了,我沒有使用鏈接器,但是完全手動的EXE生成(與WinMain
有什麼不同,像進一步的堆棧參數一樣?),但基本上它只是一個程序,Windows自動調用它的入口點而上述將是它將包含什麼程序的兩個不同選項。
StackOverflow不是論壇;如果您需要添加更多詳細信息,請[編輯您的問題](http://stackoverflow.com/posts/5951081/edit)或使用評論與已回答的人交流。答案應該是答案,而不是關於問題的附加信息。 – Will 2011-05-11 13:25:15