· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› GetCommandLine&EAX

Посл.отвђт Сообщенiе


Дата: Фев 3, 2004 16:48:09

Народ подскажите, читаю книжку по асму, и там есть такой код:
....
invoke GetCommandLine
mov CommandLine,eax
invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
invoke ExitProcess,0
....

Зачем мы заносим в CommandLine, eax?
ИМХО быстрее и проще:
invoke WinMain,hInstance,NULL,EAX,SW_SHOWDEFAULT
Или я не прав, и есть какая то тонкость?


Дата: Фев 3, 2004 17:32:46

Это элементарно, чтоб использовать в дальнейшем.


Дата: Фев 3, 2004 17:43:23

Asterix
Так дальше нигде переменная CommandLine не используется, более того в ф-ии WinMain создается преременная-аналог CmdLine...


Дата: Фев 3, 2004 18:13:50

Это они "на автомате" лепят, имхо.


Дата: Фев 6, 2004 05:32:29
Правка

Это они "на автомате" лепят, имхо.
Да, при просмотре исходного кода часто замечаешь, что он сделан "по шаблонам", как обычным (copy), так и шаблонам RadASM :)
Кстати, по 1-й строчке GetModuleHandle большинство анализаторов PE32 считают, что компилятор - MASM :o)…


Дата: Фев 7, 2004 21:41:46

Самое плохое в этом премере то, что это не асм, а "реализация С посредством асма".

nice, вы сделали очень правильное наблюдение, IMHO. В асме нет необходимости в таком "двойном неиспользовании" CommandLine. К тому же и без WinMain можно часто обойтись. В вашем примере ее наверняка можно просто написать на месте invoke


Дата: Фев 7, 2004 23:46:55

S_T_A_S_
А как без винМайн? Нет примера, глянуть?


Дата: Фев 8, 2004 02:07:57

Как без винМайн? Да просто. Посмотрите, что делает invoke WinMain:
- заносит в стек hInstance. Это по большему счету вообще константа в Win32: hInstance EQU 400000h;
- следующее значение hPrevInstance, уже и так равно 0;
- по поводу CommandLine вы уже писАли;
- SW_SHOWDEFAULT - это тоже константа!

Зачем эти все КОНСТАНТЫ передавать из одной процедуры в другую?
Можно просто поместить "внутренности" WinMain вместо invoke.. И все.. ;)


Дата: Фев 8, 2004 10:35:49

S_T_A_S_
Точно :)
Пасибо!


Дата: Фев 9, 2004 02:56:59

Т.к. обычно мне командная строка не нужна то я, например, начинаю прогу где-то так:
    invoke GetModuleHandle, NULL
    mov hInstance, eax
    invoke DialogBoxParam, eax, 200, 0, OFFSET DlgProc, 0
    invoke ExitProcess, eax


Дата: Фев 9, 2004 04:56:30

А можно так:
;    invoke GetModuleHandle, NULL
;    mov hInstance, eax
     mov hInstance, 400000h

;-)

А еще я видел такое:
    hInstance     dd foo
foo  and hInstance, 0FFF00000h

Это если предполагать, что виндос загрузит PE по другому адресу


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.101