HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 03.02.2010, 23:13
Ruskey
Новичок
Регистрация: 16.11.2006
Сообщений: 20
Провел на форуме:
589436

Репутация: 14
По умолчанию

Цитата:
Сообщение от Actor  
.386
.model flat, stdcall
option casemap:none
ExitProcess proto :dword
GetStdHandle proto :dword
WriteConsoleA proto :dword, :dword,\
:dword, :dword, :dword
includelib \masm32\lib\kernel32.lib
.data
stdout dd ?
msg db "My name is Vova", 0dh, 0ah
cWritten dd ?
.code
start:
invoke GetStdHandle, -11
mov stdout, eax
invoke WriteConsoleA, stdout, ADDR msg, sizeof msg,\
ADDR cWriten, 0
invoke ExitProcess, 0
end start
У тебя метка cWritten (12 строка) с двумя "t", в функцию WriteConsoleA ты передал с одной "t".

Собирать этот код так:
C:\masm32\bin\ml.exe /c /coff lol.asm
C:\masm32\bin\link.exe /subsystem:console lol.obj

lol.asm - имя исходника.
 
Ответить с цитированием

  #2  
Старый 04.02.2010, 16:35
Actor
Новичок
Регистрация: 10.01.2010
Сообщений: 5
Провел на форуме:
31750

Репутация: 0
По умолчанию

Цитата:
Собирать этот код так:
C:\masm32\bin\ml.exe /c /coff lol.asm
C:\masm32\bin\link.exe /subsystem:console lol.obj

lol.asm - имя исходника.
thx, заработало)

Кстати, нашел второй способ решения проблемы - вызвать процедуру AllocConsole.
 
Ответить с цитированием

  #3  
Старый 02.02.2010, 20:58
slesh
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


По умолчанию

GetStdHandle возвращет дискриптор ввода вывода.
-11 это STD_OUTPUT_HANDLE

какое значение - это не важно.
т.е. все значения кроме INVALID_HANDLE_VALUE считаются нормальными.
будут
Ты как прогу компилил? Под Win32 или под Консоль?
Нужно чтобы подконсоль компили. типа черное окошко

Последний раз редактировалось slesh; 02.02.2010 в 21:11..
 
Ответить с цитированием

  #4  
Старый 02.02.2010, 22:18
Шухер
Познающий
Регистрация: 13.12.2009
Сообщений: 63
Провел на форуме:
483747

Репутация: 5
По умолчанию

среда виндовс.устанавливал масм32 версии 9. и ничего более
мне просто нужно код подправить, сказали что его масмом компилить нужно
 
Ответить с цитированием

  #5  
Старый 02.02.2010, 22:24
expee
Новичок
Регистрация: 02.02.2010
Сообщений: 24
Провел на форуме:
72815

Репутация: 1
По умолчанию

Насчет DlgStatic - первая ссылка в гугле - сайт Kaimi: http://kaimi.ru/2009/05/210/ и там есть комментарии
 
Ответить с цитированием

  #6  
Старый 03.02.2010, 00:17
Шухер
Познающий
Регистрация: 13.12.2009
Сообщений: 63
Провел на форуме:
483747

Репутация: 5
По умолчанию

ничего полезного там не нашел
 
Ответить с цитированием

  #7  
Старый 03.02.2010, 00:34
Kaimi
Познавший АНТИЧАТ
Регистрация: 23.08.2007
Сообщений: 1,237
Провел на форуме:
18127311

Репутация: 1676


По умолчанию

Цитата:
ничего полезного там не нашел
Да ладно?
Цитата:
DlgStatic "Введите символы с картинки:",0,5,20,105,15,100 ;текст, стиль, x, y, ширина, высота, ID контрола
 
Ответить с цитированием

  #8  
Старый 03.02.2010, 18:15
Actor
Новичок
Регистрация: 10.01.2010
Сообщений: 5
Провел на форуме:
31750

Репутация: 0
По умолчанию

Цитата:
Ты как прогу компилил? Под Win32 или под Консоль?
Нужно чтобы подконсоль компили. типа черное окошко
? На RadAsm-e. Мм, сначала assemble, потом link. В результате получал 2 файла - .obj и .exe.

Чтобы посмотреть, выводит ли в консоль, я запустил консоль)))
win+r -> cmd -> [перешел в папку в ехе-шником] -> запустил ехе-шник)

Вместо текста программа просто пропускает строку и все.
 
Ответить с цитированием

  #9  
Старый 09.02.2010, 03:16
1ten0.0net1
Time out
Регистрация: 28.11.2005
Сообщений: 547
Провел на форуме:
2320925

Репутация: 1348


По умолчанию

Опрашиваю все съёмные носители и далее использую функцию CreateFile вот таким образом
invoke CreateFile, drive, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, 0
;проверка на INVALID_HANDLE_VALUE - тогда на exit
; ОШИБКА НА ДИСКЕ, оставшемся из-за Alcohol или DAEMON TOOLS. MSDN - This error can occur if the CD-R drive or CD-RW drive is not recognized as a recordable device.

cmp eax, 0
je next

На одном устройстве выпадает окошко с ошибкой There is no disk in the drive (это остаток виртуального диска от DAEMON TOOLS) - если нажать далее - то всё ок.

Как мне сделать так, чтобы оно не выскакивало вообще (без программного нажатия кнопки далее). В случае, если так нереально сделать - то как сделать програмнное нажатие кнопки далее - я имею ввиду - перехватить хэндл появившего окна и отослать диспетчеру что-то типа MB_OK?
__________________
Нельзя считать себя достаточно взрослым, если у тебя школьные фотографии - цифровые.
 
Ответить с цитированием

  #10  
Старый 10.02.2010, 00:11
xlinux
Banned
Регистрация: 11.03.2007
Сообщений: 32
Провел на форуме:
561794

Репутация: 73
По умолчанию

Цитата:
Сообщение от 1ten0.0net1  
Опрашиваю все съёмные носители и далее использую функцию CreateFile вот таким образом
invoke CreateFile, drive, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, 0
;проверка на INVALID_HANDLE_VALUE - тогда на exit
; ОШИБКА НА ДИСКЕ, оставшемся из-за Alcohol или DAEMON TOOLS. MSDN - This error can occur if the CD-R drive or CD-RW drive is not recognized as a recordable device.

cmp eax, 0
je next

На одном устройстве выпадает окошко с ошибкой There is no disk in the drive (это остаток виртуального диска от DAEMON TOOLS) - если нажать далее - то всё ок.

Как мне сделать так, чтобы оно не выскакивало вообще (без программного нажатия кнопки далее). В случае, если так нереально сделать - то как сделать програмнное нажатие кнопки далее - я имею ввиду - перехватить хэндл появившего окна и отослать диспетчеру что-то типа MB_OK?
Код:
//Функция проверки готовности диска, нужна для дискет и компакт-дисков
      BOOL IsDriveReady(char drive)
      {
      BOOL res;
      char path[4];
      asm
        {
//заполняем path
        mov al,drive
   lea ebx,path
   mov [ebx],al
   mov [ebx+1], byte ptr':'
   mov [ebx+2], byte ptr'\'
   mov [ebx+3], byte ptr 0
   push SEM_FAILCRITICALERRORS
   call SetErrorMode            //устанавливаем минимальный уровень ошибок
   push eax                                     //сохраняем страрый ErrorLevel
   push ebx
   call SetCurrentDirectory     //пытаемся обратиться к приводу
   mov res,eax
   call SetErrorMode                    //возвращаем старый Errorlevel
         }
      return res;
      }
Короче, надо вызвать SetErrorMode с параметром SEM_FAILCRITICALERRORS
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопросы для новичков! (faq) PEPSICOLA С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby 92 14.05.2010 17:59
ОС с нуля z01b С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby 36 03.07.2008 15:30



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.