Поиск:

Ответ в темуСоздание новой темы Создание опроса
> AllocConsole, валиться прога 
:(
    Опции темы
Doc_d0s
Дата 13.9.2006, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 15.12.2004
Где: в кресле

Репутация: нет
Всего: 3



Код

.486

.model flat,stdcall

    include E:\masm32\include\windows.inc
    include E:\masm32\include\user32.inc
    include E:\masm32\include\kernel32.inc
    include E:\masm32\include\gdi32.inc
    
    includelib E:\masm32\lib\user32.lib
    includelib E:\masm32\lib\kernel32.lib
    includelib E:\masm32\lib\gdi32.lib
    
        .data
    
    TitleText    db '[!]Hello',0
    lenInMsg    equ        $-TitleText
    hStdOut        dd    ?
    hStdIn        dd    ?
    chWr        dd    ?
    chR            dd        ?
    
    .code
    start    proc    near
        
        invoke AllocConsole
        test eax,eax
        jz ExitP
        
        push    offset    TitleText
        call    SetConsoleTitleA
        test    eax,eax
        jz        ExitP
        
        invoke    GetStdHandle, STD_OUTPUT_HANDLE
        mov    hStdOut, eax
        
        invoke    GetStdHandle, STD_INPUT_HANDLE
        mov    hStdIn, eax

        invoke WriteConsole, hStdOut, offset TitleText, lenInMsg, offset chWr, NULL
        invoke ReadConsole, hStdIn, offset TitleText, 30, offset chR, NULL
ExitP:    
        push 0
        call ExitProcess
        ret

    start endp
    end start

не могу понять ошибка в семантике, или винда мне мозги паритsmile
--------------------
Админ- это вождь Apache'й :)
PM MAIL ICQ   Вверх
dumb
Дата 13.9.2006, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 4
Всего: 158



Код

;...
.model flat,stdcall

option casemap:none ; !!!

    include \masm32\include\windows.inc
;...

PM MAIL   Вверх
Doc_d0s
Дата 13.9.2006, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 15.12.2004
Где: в кресле

Репутация: нет
Всего: 3



не помогает(
--------------------
Админ- это вождь Apache'й :)
PM MAIL ICQ   Вверх
dumb
Дата 13.9.2006, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 4
Всего: 158



как собираешь?

так все собирается без проблем:
Код

\masm32\bin\ml.exe /c /coff console.asm
\masm32\bin\link.exe /SUBSYSTEM:WINDOWS console.obj

PM MAIL   Вверх
Doc_d0s
Дата 14.9.2006, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 15.12.2004
Где: в кресле

Репутация: нет
Всего: 3



Проект в масме
Как оболочка RadASM, фишка в том что аналогичная программа на С++ в VS дает такой же результат, GetLastError()-dslftn 5-Access Denied smile
--------------------
Админ- это вождь Apache'й :)
PM MAIL ICQ   Вверх
Damarus
Дата 14.9.2006, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: нет
Всего: 29



Doc_d0s, у меня почти тоже (прототипы и константы добавнены, т.к. нет MASM32) вообще не компелируется:
Код

; @echo off
; goto make
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

.486
.model flat,stdcall

AllocConsole PROTO
SetConsoleTitleA PROTO :DWORD
GetStdHandle PROTO :DWORD
WriteConsoleA PROTO :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
ReadConsoleA PROTO :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
ExitProcess PROTO :DWORD
    
includelib user32.lib
includelib kernel32.lib
includelib gdi32.lib
    
.data 
    TitleText    db  '[!]Hello',0
    lenInMsg    equ  $-TitleText
    hStdOut      dd    ?
    hStdIn       dd    ?
    chWr         dd    ?
    chR          dd    ?
    
.const
STD_OUTPUT_HANDLE  equ  -11
STD_INPUT_HANDLE   equ  -10
NULL               equ  0
    
.code
start proc near
        
    invoke AllocConsole
    test eax,eax
    jz ExitP
        
    push   offset TitleText
    call   SetConsoleTitleA
    test   eax,eax
    jz     ExitP
        
    invoke GetStdHandle, STD_OUTPUT_HANDLE
    mov    hStdOut, eax
        
    invoke GetStdHandle, STD_INPUT_HANDLE
    mov    hStdIn, eax

    invoke WriteConsoleA, hStdOut, offset TitleText, lenInMsg, offset chWr, NULL
    invoke ReadConsoleA, hStdIn, offset TitleText, 30, offset chR, NULL
    
ExitP:    
    push 0
    call ExitProcess
    ret

start endp
end start

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; :make
; ml /c /coff Doc_d0s.cmd
; link /MACHINE:X86 /SUBSYSTEM:WINDOWS /LIBPATH:"D:\Microsoft Visual Studio 8\VC\PlatformSDK\Lib" Doc_d0s.obj
; pause

Цитата
C:\>Doc_d0s.cmd
Microsoft ® Macro Assembler Version 8.00.50727.42
Copyright © Microsoft Corporation.  All rights reserved.

 Assembling: Doc_d0s.cmd
Doc_d0s.cmd(50) : error A2070: invalid instruction operands
Для продолжения нажмите любую клавишу . . .

А вот так нормально работает:
Код

; @echo off
; goto make
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

.486
.model flat,stdcall

AllocConsole PROTO
SetConsoleTitleA PROTO :DWORD
GetStdHandle PROTO :DWORD
WriteConsoleA PROTO :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
ReadConsoleA PROTO :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
ExitProcess PROTO :DWORD
    
includelib user32.lib
includelib kernel32.lib
includelib gdi32.lib
    
.data 
    TitleText    db  '[!]Hello',0
    lenInMsg     dd  $-TitleText
    hStdOut      dd    ?
    hStdIn       dd    ?
    chWr         dd    ?
    chR          dd    ?
    
.const
STD_OUTPUT_HANDLE  equ  -11
STD_INPUT_HANDLE   equ  -10
NULL               equ  0
    
.code
start proc near
        
    invoke AllocConsole
    test eax,eax
    jz ExitP
        
    push   offset TitleText
    call   SetConsoleTitleA
    test   eax,eax
    jz     ExitP
        
    invoke GetStdHandle, STD_OUTPUT_HANDLE
    mov    hStdOut, eax
        
    invoke GetStdHandle, STD_INPUT_HANDLE
    mov    hStdIn, eax

    invoke WriteConsoleA, hStdOut, offset TitleText, lenInMsg, offset chWr, NULL
    invoke ReadConsoleA, hStdIn, offset TitleText, 30, offset chR, NULL
    
ExitP:    
    push 0
    call ExitProcess
    ret

start endp
end start

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; :make
; ml /c /coff Doc_d0s.cmd
; link /MACHINE:X86 /SUBSYSTEM:WINDOWS /LIBPATH:"D:\Microsoft Visual Studio 8\VC\PlatformSDK\Lib" Doc_d0s.obj
; pause

PM MAIL ICQ Jabber   Вверх
Doc_d0s
Дата 14.9.2006, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 15.12.2004
Где: в кресле

Репутация: нет
Всего: 3



Господа, по моему глюк в винде, потому что даже так валиться(
--------------------
Админ- это вождь Apache'й :)
PM MAIL ICQ   Вверх
Doc_d0s
Дата 14.9.2006, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 15.12.2004
Где: в кресле

Репутация: нет
Всего: 3



А вообще обязательно использовать эту ф-ию:?
--------------------
Админ- это вождь Apache'й :)
PM MAIL ICQ   Вверх
Damarus
Дата 14.9.2006, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: нет
Всего: 29



Цитата(Doc_d0s @  14.9.2006,  21:36 Найти цитируемый пост)
А вообще обязательно использовать эту ф-ию:?

Какую smile Если AllocConsole, то нет. Линкуй с ключом /SUBSYSTEM:CONSOLE и консоль программе даст система.

Добавлено @ 20:53 
Всё, ответ найден smile Ты уже линкуешь с ключом /SUBSYSTEM:CONSOLE, поэтому к моменту вызова AllocConsole у программы уже есть консоль, а процесс может иметь только одну консоль.

Добавлено @ 20:55 
Т.е. так будет работать:
Код

.486
.model flat,stdcall

SetConsoleTitleA PROTO :DWORD
GetStdHandle PROTO :DWORD
WriteConsoleA PROTO :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
ReadConsoleA PROTO :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
ExitProcess PROTO :DWORD
    
includelib user32.lib
includelib kernel32.lib
includelib gdi32.lib
    
.data 
    TitleText    db  '[!]Hello',0
    lenInMsg     dd  $-TitleText
    hStdOut      dd    ?
    hStdIn       dd    ?
    chWr         dd    ?
    chR          dd    ?
    
.const
STD_OUTPUT_HANDLE  equ  -11
STD_INPUT_HANDLE   equ  -10
NULL               equ  0
    
.code
start proc near
  
    push   offset TitleText
    call   SetConsoleTitleA
    test   eax,eax
    jz     ExitP
        
    invoke GetStdHandle, STD_OUTPUT_HANDLE
    mov    hStdOut, eax
        
    invoke GetStdHandle, STD_INPUT_HANDLE
    mov    hStdIn, eax

    invoke WriteConsoleA, hStdOut, offset TitleText, lenInMsg, offset chWr, NULL
    invoke ReadConsoleA, hStdIn, offset TitleText, 30, offset chR, NULL

ExitP:
    push 0
    call ExitProcess
    ret

start endp
end start


Это сообщение отредактировал(а) Damarus - 14.9.2006, 20:56
PM MAIL ICQ Jabber   Вверх
BUGOR
Дата 15.9.2006, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 12.3.2006

Репутация: нет
Всего: 16



Перед вызовом AllocConsole надо вызвать FreeConsole.



--------------------
Живу недоумевая, всё время хочу понять...
http://hunger.ru 
PM MAIL WWW ICQ   Вверх
Doc_d0s
Дата 15.9.2006, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 15.12.2004
Где: в кресле

Репутация: нет
Всего: 3



тему можно закрывать, проблема была при линковке.../SUBSYSTEM:CONSOLE, спасибо Damarus'y, если поставить другой тип подсистемы то все работает)
Благодарю всех за внимание%)

Это сообщение отредактировал(а) Doc_d0s - 15.9.2006, 13:46
--------------------
Админ- это вождь Apache'й :)
PM MAIL ICQ   Вверх
dumb
Дата 15.9.2006, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 4
Всего: 158



вроде как уже разжевали все:

если компилить с /SUBSYSTEM:CONSOLE или, например, твоя прога запускается из другой с наследованием консоли, то ни AllocConsole, ни FreeConsole не нужно делать.

если же компилить с /SUBSYSTEM:WINDOWS, и нет уверенности в том, что процессу передадут консоль, то делаем FreeConsole(на тот случай, если она все-таки была) и потом AllocConsole. либо не париться и просто игнорить ошибку AllocConsole.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0815 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.