в книге Крупника есть пример, вывод фразы на экран, дальше пишу примеры строк из кода: 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? Он имеет начальный адрес, объем, количество символов, тип символов. Где хранится эта информация? Какая функция создает окно с черным фоном где выводятся фраза? Не судите меня строго, я чайник и уже спрашиваю про устройство виндовс, но всё таки, объясните простыми словами
в этом и проблема. начни с базовых вещей. у тебя каша в голове. попробуй почитать книжки попроще и поосновательней.
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 нет... это константный массив байт, внутри твоего екзешника, отображенного на виртуальную память процесса))) он имеет указатель на первый символ и нулевой байт, как символ окончания строки... во время выполнения - в виртуальной памяти процесса... черное окно создает операционная система для программ с консольной подсистемой... ты зря забегаешь вперед... ты не понимаешь как строки хранятся в памяти, а уже хочешь, чтоб тебе объяснили, как операционная система устроена))) и может все же не стоит начинать с ассемблера?
bnk204 ADDR это адрес того, что следует за ним. Код (Text): PUSH 0 LEA EAX cWritten PUSH EAX PUSH SizeOf msg LEA EAX, msg PUSH EAX PUSH stdout CALL WriteConsoleA Возвращают один из стандартных хендлов. Какой хендл возвращать задается ее параметром: Код (Text): Specifies the device for which to return the handle. This parameter can have one of the following values: Value Meaning STD_INPUT_HANDLE Standard input handle STD_OUTPUT_HANDLE Standard output handle STD_ERROR_HANDLE Standard error handle Нет
не, он все верно делает, ящитаю. надо начинать от простого к сложному. но трудно составить себе "программу" обучения, когда тебе неизвестна предметная область.
спасибо за ответы почему ассемблер? хотел изучать язык си, но как работает стек, было трудно освоить, благодаря ассемблеру всё стало ясно а что проще книги крупника есть?
fasm programmer's manual если серьезно - не знаю. я учился подходом "сверху вниз" - от С++ до ассемблера. долго и непродуктивно. много с gdb работал. большое впечатление произвела книга Эккеля "Философия С++", в ней обсуждается довольно много "тонких" вопросов, в том числе затрагивается трансляция кода на плюсах в ассемблер. раз у тебя возникают вопрос вроде тех, что в ТС-посте, то ты либо сильно вперед забегаешь, либо твой Крупник излагает не достаточно понятно и последовательно. скорее всего и то и другое. если бы ты попрактиковался с сями еще немного, то у тебя бы не возникали вопросы вроде для изучающего си первым приходит как раз таки базовое понимание работы с памятью. что из себя представляют массивы, строки, указатели. понимание работы стека тоже важно, но в случае с си второстепенно. си - почти тот же ассемблер, можно с него кстати начать.
Хэндл это ссылка на обьект, описатель его в виде уникального значения, связанного с обьектом. Текст это не обьект, а данные.