Программирование и админка с почесыванием уха рукой через голову.
Поиски истины
- Всё подряд
- Змий искуситель
- Работа с cmd, bat, debug в Windows
- Вирт с машинами
5 сент. 2014 г.
Работа с командной строкой Windows, Программа Debug и её использование
Работа с командной строкой Windows. Программа Debug и её использование.
Запуск Debug.exe, программы для проверки и отладки исполнительных файлов MS-DOS. Выполненная без параметров команда debug запускает программу Debug.exe и выводит приглашение команды debug, представленное дефисом (-).
1) Запустить Virtual PC 2007 с образом Windows XP. Перевести ОС в режим командной строки.
Пуск -> Выполнить -> Вводим cmd и нажимаем Enter .
2) Получить и зафиксировать справку по опциям команды debug
В консоли: ввести debug , затем (?).
Краткий список всех команд:
A (assemble) — Транслирование команд ассемблера в машинный код . Адрес по умолчанию — CS:0100h.
Как создать программу в блокноте (Часть I)
С (compare) — Сравнение содержимого двух областей памяти. По умолчанию используется DS . В команде указывается либо длина участков, либо диапазон адресов.
D (dump) — Вывод содержимого области памяти в шестнадцатеричном и ASCII-форматах. По умолчанию используется DS . Можно указывать длину или диапазон.
E (enter) — Ввод в память данные или инструкции машинного кода. По умолчанию используется DS .
F (fill) — Заполнение области памяти данными из списка. По умолчанию используется DS . Использовать можно как длину, так и диапазон.
G (go) — Выполнение отлаженной программы на машинном языке до указанной точки останова. По умолчанию используется DS . При этом следует убедиться, что IP содержит корректный адрес.
H (hexadecimal) — Вычисление суммы и разности двух шестнадцатеричных величин.
I (input) — Считывание и вывод одного байта из порта.
L (load) — Загрузка файла или данных из секторов диска в память. . По умолчанию — CS:100h. Файл можно указать с помощью команды N или аргумента при запуске debug.exe.
M (move) — Копирование содержимого ячеек памяти; по умолчанию используется DS . Можно указывать как длину, так и диапазон.
N (name) — Указание имени файла для команд L (LOAD) и W (WRITE) .
O (output) — Отсылка байта в порт вывода.
P (proceed) — Выполнение инструкций CALL, LOOP, INT (цикла, прерывания, процедур) или повторяемой строковой инструкции с префиксами REPnn , переходя к следующей инструкции.
Q (quit) — Завершение работы debug.exe . Без сохранения тестируемого файла.
R (register) — Вывод содержимого регистров и следующей инструкции.
S (search) — Поиск в памяти символов из списка. По умолчанию используется DS . Можно указывать как длину, так и диапазон.
T (trace) — Пошаговое выполнение программы. Как и в команде P , по умолчанию используется пара CS:IP . Но для выполнения прерываний лучше пользоваться командой P .
U (unassemble) — Дизассемблирование машинного кода. По умолчанию используется пара CS:IP .
Команды в cmd для новичков
W (write) — Запись файла из debug.exe на диск. Необходимо обязательно задать имя файла командой N , если он не был загружен.
3) Получим и зафиксируем дампы характерных областей RAM и ROM
Наберем команду R .
Регистры CS, DS, ES, SS в этот момент инициализированы адресом 256-байтного префикса сегмента програмы, а рабочая области в памяти будет начинаться с адреса этого префикса + 100h.
Правила набора команд:
А) В debug.exe не различается регистр букв.
Б) Пробелы в командах используется только для разделения параметров.
В) Вводимые числа должны быть в шестнадцатеричной системе счисления, причем без завершающей буквы h.
Г) Сегмент и смещение записываются с использованием двоеточия, в формате сегмент:смещение.
4) Просмотр области памяти.
Команда D, позволяет просматривать содержимое отдельных областей памяти .
Проверим размер доступной для работы памяти. Для этого введем: d 40:13 и Ввод.
Первые два байта, появившиеся в результате на экране, содержат размер памяти в килобайтах и в шестнадцатеричном представлении, причем байты располагаются в обратной последовательности. У Нас это: 8002 0280 640 (К)
Здесь на запрос просмотра участка памяти мы получили восемь строк, в которых указано содержимое выбранной области памяти. Каждая строка состоит из трех частей:
- Адрес первого слева показанного байта в формате сегмент:смещение.
- Шестнадцатеричное представление параграфа (16 байт), начинающегося с указанного в начале строки байта.
- Символы этого же параграфа в ASCII-формате.
4) Проверка параллельных и последовательных портов.
Первые 16 байт области данных BIOS содержат адреса параллельных и последовательных портов. Первые выведенные восемь байтов указывают на адреса последовательных портов COM1-COM4. Следующие 8 байтов указывают на адреса параллельных портов LPT1-LPT4. Адрес порта 78 03 – записывается в обращенной форме.
5) Проверка состояния регистра клавиатуры.
В области данных BIOS по адресу 417h находится первый байт, который хранит состояние регистра клавиатуры..
6) Проверка даты производства BIOS.
Сведения об авторских правах на BIOS встроены в ROM BIOS по адресу FE00:0 . Строку с копирайтом можно легко найти в ASCII -последовательности, а серийный номер — в виде шестнадцатеричного числа. На экране видим семизначный номер компьютера и дата копирайт. Хотя, строка с указанием авторских прав может быть длинной и не умещаться в выведенную область памяти. В таком случае следует просто ввести еще раз D.
Дата также записана в ROM BIOS начиная с адреса FFFF:5 . После выполнения соответствующей команды в ASCII -последовательности будет находиться эта дата, записанная в формате мм/дд/гг .
7) Пример машинных кодов.
Рассмотрим создание программы на машинном языке, ее представление в памяти и результаты выполнения. Команда отладчика A (Assemble) переводит DEBUG в режим приема команд ассемблера и перевода их в машинные коды.
Теперь, когда программа введена в память, попробуем управлять ее выполнением. Для начала проверим текущее состояние регистров и флагов, для этого вводим команду R.
IP — регистр, содержащий адрес-смещение следующей команды, подлежащей исполнению, относительно кодового сегмента CS в процессорах семейства x86.
Регистр IP связан с CS в виде CS:IP, где CS является текущим кодовым сегментом, а IP — текущим смещением относительно этого сегмента.
Регистр IP является 16-разрядным регистром-указателем. Кроме него, в состав регистров этого типа входят SP (Stack Pointer — указатель стека) и BP (Base Pointer — базовый указатель).
Запись CX прошла успешно и равна 8-и. Произошла инициализация сегментов DS, ES, SS, CS одним и тем же адресом. Регистр IP содержит 0100, указывая на то, что инструкции выполняются со смещения 100h относительно CS (с него и начинали).
Здесь же указаны и значения флагов переполнения, направления, прерывания, знака, нуля, дополнительного переноса, четности и переноса:
Источник: domenzero.blogspot.com
Как написать программу через командную строку
Рассмотрим создание первой простейшей программы на C++ с помощью компилятора g++ , который на сегодняшний день является одним из наиболее популярных компиляторов для C++, доступен для разных платформ и который распространяется в рамках пакета компиляторов GCC. Более подробную информацию о g++ можно получить на официальном сайте проекта https://gcc.gnu.org/.
Набор компиляторов GCC распространяется в различных версиях. Для Windows одной из наиболее популярных версий является пакет средств для разработки от некоммерческого проекта MSYS2 . Следует отметить, что для MSYS2 требуется 64-битная версия Windows 7 и выше (то есть Vista, XP и более ранние версии не подходят)
Итак, загрузим программу установки MSYS2 с официального сайта MSYS2:
После загрузки запустим программу установки:
На первом шаге установки будет предложено установить каталог для установки. По умолчанию это каталог C:msys64:
Оставим каталог установки по умолчанию (при желании можно изменить). На следующем шаге устанавливаются настройки для ярлыка для меню Пуск, и затем собственно будет произведена установка. После завершения установки нам отобразить финальное окно, в котором нажмем на кнопку Завершить
После завершения установки запустится консольное приложение MSYS2.exe. Если по каким-то причинам оно не запустилось, то в папке установки C:/msys64 надо найти файл usrt_64.exe :
Теперь нам надо установить собственно набор компиляторов GCC. Для этого введем в этом приложении следующую команду:
pacman -S mingw-w64-ucrt-x86_64-gcc
Для управления пакетами MSYS2 использует пакетный менеджер Packman. И данная команда говорит пакетному менеджеру packman установить пакет mingw-w64-ucrt-x86_64-gcc , который представляет набор компиляторов GCC (название устанавливаемого пакета указывается после параметра -S ).
и после завершения установки мы можем приступать к программированию на языке C++. Если мы откроем каталог установки и зайдем в нем в папку C:msys64ucrt64bin , то найдем там все необходимые файлы компиляторов:
В частности, файл g++.exe как раз и будет представлять компилятор для языка С++.
Далее для упрощения запуска компилятора мы можем добавить путь к нему в Переменные среды. Для этого можно в окне поиска в Windows ввести «изменение переменных среды текущего пользователя»:
Нам откроется окно Переменных среды:
И добавим путь к компилятору C:msys64ucrt64bin :
Чтобы убедиться, что набор компиляторов GCC успешно установлен, введем следующую команду:
gcc —version
В этом случае нам должна отобразиться версия компиляторов
Создание первой программы
Итак, компилятор установлен, и теперь мы можем написать первую программу. Для этого потребуется любой текстовый редактор для набора исходного кода. Можно взять распространенный редактор Visual Studio Code или даже обычный встроенный Блокнот.
Итак, создадим на жестком диске С папку для исходных файлов. А в этой папке создадим новый текстовый файл, который переименуем в hello.cpp . То есть по сути файлы исходного кода на С++ — это обычные текстовые файлы, которые, как правило, имеют расширение cpp .
В моем случае файл hello.cpp находится в папке C:cpp.
Теперь определим в файле hello.cpp простейший код, который будет выводить строку на консоль:
#include // подключаем заголовочный файл iostream int main() // определяем функцию main < // начало функции std::cout // конец функции
Для вывода строки на консоль необходимо подключить нужный функционал. Для этого в начале файла идет строка
#include
Данная строка представляет директиву препроцессора, которая позволяет подключить библиотеку iostream. Эта библиотека нужна для вывода строки на консоль.
Далее идет определение функции main . Функция main должна присутствовать в любой программе на С++, с нее собственно и начинается выполнение приложения.
Функция main состоит из четырех элементов:
- Тип возвращаемого значения . В данном случае это тип int . Этот тип указывает, что функция должна возвращать целое число.
- Имя функции . В данном случае функция называется main.
- Список параметров . После имени функции в скобках идет список параметров. Но в данном случае скобки пустые, то есть функция main не принимает параметров.
- Тело функции . После списка параметров в фигурных скобках идет тело функции. Здесь и определяются собственно те действия, которые выполняет функция main.
В теле функции происходит вывод строки на консоль. Для обращения к консоли используется стандартный поток вывода std::cout . С помощью оператора
В конце осуществляем выход из функции с помощью оператора return . Так как функция должна возвращать целое число, то после return указывается число 0. Ноль используется в качестве индикатора успешного завершения программы.
После каждой инструкции в языке C++ ставятся точка с запятой.
Каждая строка снабжена комментарием. Все, что написано после двойного слеша // представляет комментарий. Комментарий не учитывается при компиляции приложения, и не является частью программного кода, а служат лишь для его описания. Комментарий позволяет понять, что делает программа.
Теперь скомпилируем этот файл. Для этого откроем командную строку Windows и вначале с помощью команды cd перейдем к папке с исходным файлом:
cd C:cpp
Чтобы скомпилировать исходный код, необходимо компилятору gcc передать в качестве параметра файл hello.cpp:
g++ hello.cpp -o hello
Дополнительный необязательный параметр -o hello указывает, что скомпилированный файл будет называться hello.exe. Если не указать этот параметр, то файл будет называться по умолчанию — a.exe.
После выполнения этой команды будет скомпилирован исполняемый файл, который в Windows по умолчанию называется hello.exe. И мы можем обратиться к этому файлу, и в этом случае консоль выведет строку «Hello METANIT.COM!», собственно как и прописано в коде.
Если вместо командной строки используется оболочка PowerShell, то для запуска файла надо прописать «./hello».
Стоит отметить, что мы можем совместить компиляцию и выполнение следующей командой:
g++ hello.cpp -o hello.exe https://metanit.com/cpp/tutorial/1.2.php» target=»_blank»]metanit.com[/mask_link]
как написать игру в командной строке
Добрый день всем, кто оказался на данном сайте. В системах Linux терминал занимает большое место. И те кто работают с Linux это знают. А ведь командную строку можно так же использовать и для игр. Вот об этом мы сегодня и поговорим.
В командной строке (в терминале) можно запускать незатейливые игры. Что бы хотя бы просто немного развеяться например. И так, давайте установим первую игру, знакомую многим. Это игра “Змейка”. Переходим в терминал и устанавливаем ее командой:
Теперь давайте запустим ее, да, она не отличается крутой графикой. Но, что бы скоротать время, вполне годится. Для этой игры существует много разных уровней, что бы их открыть нужно скопировать папку с уровнями в свою домашнюю директорию. Давайте это и сделаем:
Для запуска наберите в терминале команду:
Вторая игра, которую мне хотелось бы вам представить, это так же многим знакомый тетрис. Думаю что многим он придется по душе. И так, давайте его установим.
Для запуска все так же достаточно набрать название игры в терминале:
А теперь давайте установим в нашу систему маленького котенка. Который будет бегать за курсором мыши когда вы ей двигаете. А в остальное время, когда мыш находится в спокойном состоянии, это котенок будет ложиться спать. И так, вводим команду в терминале для установки котенка в нашу систему:
Для запуска точно так же достаточно набрать названия, как и в предыдущих случаях:
Ну и последняя игра которую мы установим называется “moon-buggy”. В этой игре вам предстоит на машине перепрыгивать через препятствия. Для установки введите команду:
Для запуска этой игры все так же достаточно ввести ее название в терминале: