Хакерообразный интерфейс

Пишем отладчик, монитор и прочие утилитки

Alexey “Averrin” Nabrodov
2 min readJan 4, 2018

Прошлые части: 1, 2 и 3

Пока страшненько и не слишком удобно, но уже лучше терминала

Кратенький отчет по содеянному. В порядке увеличения интересности.

  • Переехал на std::array. Когда не нужен vector, но c-like массивы уже не удобные. Ну нельзя же всю жизнь на с++99 писать, правда? Удобно, что оно знает свою длину и можно итерироваться, как человек.
  • Долго пытался запустить что-то простое под виндой на opengl, но все или не собирается, или падает. Пришлось пойти по знакомому пути, и использовать SFML. В целом не страшно, общий размер приложения все равно меньше двух мегабайт.
  • Пришлось создать спецификации для инструкций, с названиями и способами хранения аргументов. Без этого не получилось бы ни отображение “дизасемблированного” кода, ни вообще какого-либо мониторинга состояния выполнения. Постоянно хочется сделать что-то декларативное для описания всей структуры и спецификации виртуалки.
  • Так же переделал процесс “выполнения” программы, чтобы можно было выполнять пошагово. В целом, не очень сложно будет сделать даже установку брейкпоинтов, но будет куча корнер-кейсов, которые придется обрабатывать.
  • Пришлось порядочно раскурочить сторонний редактор памяти для разноцветной подсветки. Вообще там еще куча всего, что можно сделать. И это не совпадение, что такой виджет вообще существует, я в некоторой степени из-за этого факта вообще взялся за написание отладчика=)
  • Натыкал немного костылей для указания следующей инструкции и отслеживания текущего положения выполнения, но, кажется если правильно сделать регистры CS и EIP, то можно будет более органично всем этим распоряжаться. Вообще довольно сложно разделять высокоуровневые штуки, которые нужны снаружи и максимально быстрое и низкоуровневое внутри. Очень хочется все перерефакторить, но уж больно это трудозатратно.

Есть еще миллион идей как для отладчика, так и для самой виртуалки, но новогодние праздники переходят в социальную фазу и вряд ли я успею сделать еще что-то достойное отдельной заметки. Как и с прошлыми проектами, мне очень хочется развивать его дальше и получить в итоге что-то впечатляющее, но зная себя, вряд ли. Однако с точки зрения обучения проект очень неплохо подтянул мне знания ассемблера, работы с памятью и c++ как такового.

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

--

--

No responses yet