Domanda

Ho bisogno di accedere al WinMain Parametri che utilizzano l'assemblaggio, ma non mi sembra di essere in grado di farlo, nonostante presumibilmente so dove si trovano nello stack (dword offset da 0 a 16 e da 0 a 20 quando spingo EBP prima delle operazioni). Di seguito c'è un esempio per mostrare il lpszCmdline stringa che contiene il riga di comando del programma, ma sembra sempre contenere 0, quindi non viene visualizzato nulla. Se provo a utilizzare altri argomenti nel codice di assemblaggio, nessun puntatore di stringa valido sembra essere presente e/o il programma si arresta in modo anomalo, come previsto.


;[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[MessageBoxA@USER32.DLL]
pop ebp

Tuttavia, se uso GetCommandLine Posso ottenere un puntatore valido alla stringa della riga di comando e viene visualizzata.


call dword[GetCommandLineA@KERNEL32.DLL]
   push dword 0x00001030              ;UINT uType
   push eax                           ;LPCTSTR lpCaption
   push eax                           ;LPCTSTR lpText
   push dword 0                       ;HWND hWnd
   call dword[MessageBoxA@USER32.DLL]

Dov'è l'errore nel primo blocco di codice? Di cosa ho bisogno per ottenere i parametri ed essere in grado di implementare il mio codice per restituire un puntatore valido lpszCmdLine proprio come GetCommandLine E di conseguenza, all'altro WinMain parametri? Se non riesco a ottenere il puntatore della riga di comando dallo stack, presumibilmente non potrò ottenere gli altri parametri, come nCmdShow, per altre importanti inizializzazioni.

Per favore fatemi sapere se hai bisogno di più codice rispetto al fornito sopra. Se è utile per te sapere, non ho usato alcun linker ma una generazione di exe completamente manuale (fa qualunque differenza in WinMain, come ulteriori parametri dello stack?), Ma fondamentalmente è solo un programma per il quale Windows chiama automaticamente il suo punto di ingresso e quanto sopra sarebbero le 2 diverse opzioni di quale programma avrebbe contenuto.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top