про handle, что это, зачем, как?

Тема в разделе "WASM.BEGINNERS", создана пользователем bnk204, 28 фев 2012.

  1. bnk204

    bnk204 New Member

    Публикаций:
    0
    Регистрация:
    27 фев 2012
    Сообщения:
    2
    в книге Крупника есть пример, вывод фразы на экран, дальше пишу примеры строк из кода:
    invoke GetStdHandle, -11
    invoke WriteConsoleA, stdout, ADDR msg, sizeof msg, ADDR cWritten, 0
    здесь я многое не до понял, объясните пожалуйста
    Первое, автор книги пишет, что invoke это всего лишь удобная запись вызова функции, а после имени функции идут через запятую параметры, но ADDR это оператор, как же тогда будет выглядеть строка:
    invoke WriteConsoleA, stdout, ADDR msg, sizeof msg, ADDR cWritten, 0
    без invoke, с помощью комманд push и сall?
    Второе, как работают функции GetStdHandle и WriteConsoleA? Автор объясняет что нужны такие то параметры, но хотелось бы узнать, как всё таки эти функции работают?
    Например, фраза "не могу молчать", которую я хочу вывести на экран, это объект? Он тоже имеет handle? Он имеет начальный адрес, объем, количество символов, тип символов. Где хранится эта информация? Какая функция создает окно с черным фоном где выводятся фраза?
    Не судите меня строго, я чайник и уже спрашиваю про устройство виндовс, но всё таки, объясните простыми словами
     
  2. execve

    execve New Member

    Публикаций:
    0
    Регистрация:
    27 фев 2012
    Сообщения:
    9
    в этом и проблема. начни с базовых вещей. у тебя каша в голове. попробуй почитать книжки попроще и поосновательней.
     
  3. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.315
    http://msdn.microsoft.com/en-us/library/windows/desktop/ms683231%28v=vs.85%29.aspx
    http://msdn.microsoft.com/en-us/library/windows/desktop/ms687401%28v=vs.85%29.aspx

    нет... это константный массив байт, внутри твоего екзешника, отображенного на виртуальную память процесса)))

    он имеет указатель на первый символ и нулевой байт, как символ окончания строки...

    во время выполнения - в виртуальной памяти процесса...

    черное окно создает операционная система для программ с консольной подсистемой...

    ты зря забегаешь вперед... ты не понимаешь как строки хранятся в памяти, а уже хочешь, чтоб тебе объяснили, как операционная система устроена))) и может все же не стоит начинать с ассемблера?
     
  4. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    bnk204
    ADDR это адрес того, что следует за ним.
    Код (Text):
    1. PUSH 0
    2. LEA EAX cWritten
    3. PUSH EAX
    4. PUSH SizeOf msg
    5. LEA EAX, msg
    6. PUSH EAX
    7. PUSH stdout
    8. CALL WriteConsoleA
    Возвращают один из стандартных хендлов. Какой хендл возвращать задается ее параметром:
    Код (Text):
    1. Specifies the device for which to return the handle. This parameter can have one of the following values:
    2.  
    3. Value   Meaning
    4. STD_INPUT_HANDLE    Standard input handle
    5. STD_OUTPUT_HANDLE   Standard output handle
    6. STD_ERROR_HANDLE    Standard error handle
    Нет
     
  5. execve

    execve New Member

    Публикаций:
    0
    Регистрация:
    27 фев 2012
    Сообщения:
    9
    не, он все верно делает, ящитаю. надо начинать от простого к сложному. но трудно составить себе "программу" обучения, когда тебе неизвестна предметная область.
     
  6. bnk204

    bnk204 New Member

    Публикаций:
    0
    Регистрация:
    27 фев 2012
    Сообщения:
    2
    спасибо за ответы
    почему ассемблер? хотел изучать язык си, но как работает стек, было трудно освоить, благодаря ассемблеру всё стало ясно
    а что проще книги крупника есть?
     
  7. execve

    execve New Member

    Публикаций:
    0
    Регистрация:
    27 фев 2012
    Сообщения:
    9
    fasm programmer's manual :)
    если серьезно - не знаю. я учился подходом "сверху вниз" - от С++ до ассемблера. долго и непродуктивно. много с gdb работал. большое впечатление произвела книга Эккеля "Философия С++", в ней обсуждается довольно много "тонких" вопросов, в том числе затрагивается трансляция кода на плюсах в ассемблер.

    раз у тебя возникают вопрос вроде тех, что в ТС-посте, то ты либо сильно вперед забегаешь, либо твой Крупник излагает не достаточно понятно и последовательно. скорее всего и то и другое.

    если бы ты попрактиковался с сями еще немного, то у тебя бы не возникали вопросы вроде
    для изучающего си первым приходит как раз таки базовое понимание работы с памятью. что из себя представляют массивы, строки, указатели. понимание работы стека тоже важно, но в случае с си второстепенно.

    си - почти тот же ассемблер, можно с него кстати начать.
     
  8. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    Хэндл это ссылка на обьект, описатель его в виде уникального значения, связанного с обьектом. Текст это не обьект, а данные.
     
  9. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Malfoy
    Вообще-то - это индекс таблицы.
     
  10. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    _DEN_
    Не имеет значения реализация. И это не обязательно индексация.
     
  11. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Malfoy
    По крайней мере те, что закрываются через CloseHandle.