14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 919
|
||||||||||||||||
1 | ||||||||||||||||
Программирование для dos4g.exe17.12.2023, 16:59. Показов 2546. Ответов 26
Метки нет Все метки)
(
Программу компилирую с помощью Visual Studio 5.0
У меня есть dos4g.exe с примерами, я взял hello world пытаюсь компилировать. Мой BAT файл для компиляции следующий
0
|
17.12.2023, 16:59 | |
Ответы с готовыми решениями:
26
Не запускаются AVZ. exe, CCleaner. exe, AutoLogger. exe, regedit. exe Дублируются процессы Вмонтировать exe в файл для его блокировки на время работы exe |
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 919
|
||||||
17.12.2023, 17:10 [ТС] | 2 | |||||
Добавлю что есть еще исходный файл (из поставки) Makefile для Polymake:
0
|
Модератор
|
|
17.12.2023, 20:25 | 3 |
Для начала, как обычно, скопировать текст сообщения в свой вопрос.
Затем попробовать добавить следующие библиотеки или их аналоги: LIBS = $(MSVC4Path)\LIB\LIBC.LIB $(4GDIR)\LIB\KERNEL32.LIB Флажок /DMSVC40 компилятору не нужен?
1
|
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 919
|
|
17.12.2023, 21:28 [ТС] | 4 |
error LNK2001: unresolved external symbol _printf
error LNK2001: unresolved external symbol _mainCRTStartup Это мне вопрос? Там стоит вроде этот флажок. У меня VS5.0 а флажок как ясно для VS4.0. Надо его ставить или не надо? Я либы пробовал ставить в исходный текст #pragma cooment (lib, "библиотека") но не помогло. Добавлено через 42 минуты Вобщм получилось скомпилировать ЕХЕ - я положил libc.lib и kernel32.lib из папки DOS4G/LIB в папку где исходник, в конце link.exe просто написал libc.lib kernel32.lib hello.obj подхватило либы. Но тут другая ошибка. Я смотрю makefile (см.первое сообщение) там вроде должно быть так после link.exe PE2DBG.EXE HELLO.EXE W32PATCH.EXE -T HELLO.EXE Я добавил эти две строчки после link.exe и тут вылезла другая ошибка касательно pe2dbg.exe pe2dbg.exe -> fatal error: File does not contain packed CV4.1 debug information. Что делать? Это наверно связано с тем параметром /DMSVC40 вобщим ЕХЕ получился но с ошибкой pe2dbg.exe.
0
|
Модератор
|
|
17.12.2023, 21:34 | 5 |
Не знаю.
Похоже по настройку на особенности системы программирования. Посмотрите, там могут быть флажки для Watcom, Metowerks и др. Добавлено через 2 минуты Возможно, формат отладочной информации поменялся, а утилитка pe2dbg.exe не смогла её извлечь в новом формате.
1
|
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 919
|
||||||
17.12.2023, 22:19 [ТС] | 6 | |||||
Запустил отдельно pe2dbg.exe почитал он поддерживает только VS4.0 а я все делаю VS5.0 попробую поставить VS4.0
Добавлено через 26 минут Вобщим поставил VS40 после линковки пишет CVPACK : cannot retrieve debuggin information LINK : warning LNK4027: CVPACK error что делать? Добавлено через 9 минут Извините что уже так долго разбираюсь. положил файл cvpack.exe и cvpack.err из папки VS4.0 в папку где компилирую - все нормально без ошибок и предупреждения компилируется и получается hello.exe. Я сижу под WinME - и в папке где скомпилированный ЕХЕ лежил DOS4G.exe я запускаю так
Unable to load requested program. не работает вобщим.
0
|
Модератор
|
||||||||||||||||||||||||||||||||||||
18.12.2023, 13:29 | 7 | |||||||||||||||||||||||||||||||||||
Кроме сообщения, наверно, есть номер ошибки или %errorlevel%.
Может быть полезным, если ещё не надоело разбираться. А вообще, в Windows 98 есть свой встроенный DPMI host, от которого всё пошло, и встроенный расширитель DOS/BIOS. Можно попробовать программировать напрямую для него.
Без них явный запуск загрузчика DOS4G должен работать, если загрузчик специально не проверяет, что это не исходный PE, а пропатченный PX. Добавлено через 2 часа 47 минут В Dosbox .74-3 бесконечный цикл, собранный MSVC 2022, запустился.
Кликните здесь для просмотра всего текста
DOS4g loop.exe
Добавлено через 1 час 20 минут Входит и выходит...
1
|
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 919
|
|
18.12.2023, 21:50 [ТС] | 9 |
Я полностью не цитировал, вы этот текст откуда взяли? Я так понял это из примеров VS4.0? В поставке VS4.0 если примеры для расширителя?
0
|
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 919
|
||||||||||||||||
18.12.2023, 22:14 [ТС] | 10 | |||||||||||||||
Давайте попробуем сначала.
Во первых, я создал по типу makefile из папки примера hello из поставки dos4g.exe - создал start.bat вот его код
Запускаю этот bat file - все отлично компилируется, линкуеться, патчиться, создается hello.exe. Вот код hello.c (ниже)
И тут я запускаю dos4g.exe hello.exe (тоже бат файл) и вот такой скрин: Я не знаю (см.выше в сообщениях) тот makefile что в папке с этим примером hello из dos4g.exe поставки - немного непонятный для polymake. Может я не правильно его разобрал и сделал свой start.bat. Все это делаю под WinMe. Кроме того обратите внимание на эту строку из link.exe
Все эти три файла pestub.exe libc.lib KERNEL32.LIB лежат в папке с моим этим проектом. например KERNEL32.LIB этот файл из поставки dos4g.exe.
0
|
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 919
|
|
18.12.2023, 23:03 [ТС] | 11 |
Еще такой вопрос - это дизасемблированный код из DosBox? Как такое получить? Я скачал DosBox 0.74-3.
0
|
Модератор
|
|
19.12.2023, 08:20 | 12 |
Это стандартный отладчик, встроенный в DosBox.
https://www.vogons.org/viewtopic.php?t=7323 Скачать с официального источника http://source.dosbox.com/dosbox-74-3-debug.exe положить рядом с dosbox .74-3 и запускать вместо него. После этого будет работать встроенная команда z:debug.com и остановка по требованию при нажатии Alt-Break Добавлено через 2 часа 15 минут Из release notes к версии, в которой Tenberry Software, Inc. добавила DOS/4G загрузчик из PE. Добавлено через 28 минут Уважаемый kurlyak, Вам-то зачем этот hellowolrd? Helloworld 'ы не годятся даже для проверки работоспособности системы программирования.Вы же сами писали: Вот и проверяйте работоспосбоность функций VBE под управлением соответствующей версии DOS4G в программах, собранных с помощью 32-разрядных средств разработки для win32. Чтобы затем переключиться на расширитель DOS, специально разработанный для запуска программ, выполненных в таком формате.
1
|
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 919
|
||||||
19.12.2023, 19:59 [ТС] | 13 | |||||
Я конечно понимаю уже поднадоел. Но я все сделал по инструкции к примеру из dos4g. И не работает. Среда для компиляции та что указана в инструкции dos4g - то есть VS4.0. Все компилируется, линкуется и патчится без ошибок. Но не работает.
Добавлено через 24 минуты У меня еще такой вопрос. Я запустил игру которая использует расширитель dos4gw.exe запустил в DosBox debug. Но у меня там в окне кода только 16ти битные регистры ax,cx и т.п. Это стартовый код я так понимаю? Дальше там идут 32 битные регистры? Как найти точку входа main? Например у меня в дизасемблере пишет
0
|
250 / 180 / 29
Регистрация: 26.11.2022
Сообщений: 764
|
|
19.12.2023, 21:35 | 14 |
что-то у вас не то.
когда пишете под dos4g то весь ваш код сразу должен быть 32x битный - и стартовый тоже. больше всего непонятно для чего такие извраты. хотите dos4g(w) используйте watcom
0
|
Модератор
|
|
20.12.2023, 08:09 | 15 |
MS Visual C++ 4.0?
Если бы у заказчика была та же среда, что и у Вас, то Вам бы не пришлось сочинять батник. Был бы готовый проект для MSVC++ 4.0 или .mak файл для сборки с помощью Microsoft NMake. https://learn.microsoft.com/en... e-makefile А у заказчика был PVCS Configuration Builder или что-то подобное. Иначе бы не возникали такие вопросы: Переделать makefile Добавлено через 2 часа 9 минут Отсюда какой можно сделать вывод? Со сборкой HelloWorld'а Вы, вероятно, справились. ![]() Это dos4g.exe не справился с загрузкой успешно собранной программы, о чём Вам и спообщил. Попробуйте сделать "дистрибутив", в котором будут только те файлы, которые нужно передавать заказчику: модули программы, dos4g.exe и т.д. Скопировать файлы "дистрибутива" в отдельную папку и запустить программу в отдельном dosbox'е.
0
|
Модератор
|
|
20.12.2023, 08:24 | 16 |
Это Вы отлаживаете сам dos4gw.exe
Для DosBox программа - dos4gw.exe, а игра это "документ", который открывается с помощью программы. Чтобы отлаживать игру с 32-разрядной точки входа, нужен или Watcom'овский отладчик, или отладчик dos4g Программирование для dos4g.exe Если остановить отладчиком dosbox игру, которая уже стартовала, то симулируемый процессор в момент остановки может быть и в 16-разрядном режиме.
1
|
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 919
|
||||||
20.12.2023, 11:25 [ТС] | 17 | |||||
politoto, спасибо, я давно искал отладчик для игры которая использует dos4gw.exe.
Вобщим ЕХЕ файл игры tomb.exe, я запускаю для теста dos4g.exe tomb.exe работает. Потом в папке с игрой запускаю D32.exe tomb.exe открывается окно отладчика, но не на функции main. Я посмотрел доку по d32.exe есть команда смены CS:EIP, я посмотрел в IDA файл tomb.exe там функция main по адресу
G = 1:00038460 и тут D32.exe завершил работу, вылетел вобщим. Что за проблема? Как перейти на main()?
0
|
Модератор
|
|
20.12.2023, 12:11 | 18 |
CS , скорее всего, не надо менять. В нём селектор исполняемого сегмента с базовым адресом 0 и размером до 4G.G , думаю, это ручной переход в другую точку программы (как go to, branch или jump).Чтобы просто посмотреть инструкции в другом месте в программе, не вмешиваясь в её работу, должна быть отдельная команда Unassemble. UN 0ffff0
1
|
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 919
|
|
20.12.2023, 14:06 [ТС] | 19 |
Не пойму как отлаживать. Я сижу под WinMe, запускаю d32.exe на отладку tomb.exe, игра работает в полноэкранном режиме. Как вернуться в окно d32? Переключаться между окнами игры и d32?
Добавлено через 7 минут Я думаю что после запуска "d32.exe tomb.exe" расширитель dos4g.exe еще не загрузил tomb.exe и я пытаюсь посмотреть код которого еще нету в памяти - т.е. функция main() из tomb.exe. После "d32.exe tomb.exe" (запуск из батника) я смотрю на код который в окне d32.exe - это не тот код который в IDA функция main(). Даже смотрю по hex коду команд, сравниваю- не то. Я смотрел help к d32.exe не нашел там, может есть возможность поиска в бинаром виде? Я думаю можно взять начало функции main() из IDA (в бинаром виде) и поискать этот код в d32.exe.
0
|
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 919
|
|
20.12.2023, 14:18 [ТС] | 20 |
Начет того что нету в памяти tomb.exe после запуска d32.exe.
Вот скриншот из IDA Я пробовал ставить беркпоинт в d32.exe на этот адрес CS:IEP из скрина. Ставил так "BP 1:0003a574" пишет типа NULL в ответ на команду. Потом я взял из IDA адрес main() как на скрине Посмотрел базоый адрес (начало вего кода) отмечен как 0x10000 - то есть я от адреса main() отнял 0x10000 и получил результат. Пробовал этот результат вводить как беркпоинт в d32.exe - тоже пишет в ответ на команду BP - результат NULL. Я там понял результат NULL после BP это значит кода по адресу нету. Ну конечно entry point из первого скрина это одно, а main() из второго скрина - это другое, насколько я знаю.
0
|
20.12.2023, 14:18 | |
Помогаю со студенческими работами здесь
20
Никак не могу установить WinHlp32.exe/WinHlp.exe для просмотра хелпника из ПО Как внедрить dll в exe, чтобы для работы программы нужен был только exe файл
вирус calc.exe*32 notepad.exe*32 cmd.exe cannhost.exe Вирусы dwm.exe dllhost.exe ctfmon.exe svchost.exe Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
![]() |
Новые блоги и статьи
![]() |
||||
Нестандартные приемы работы с итераторами в C++
stackOverflow 02.03.2025
Итераторы - один из краеугольных камней C++, предоставляющий универсальный механизм обхода и манипуляции данными в контейнерах. Появившись как замена небезопасным указателям, они эволюционировали от. . .
|
Лексический анализ и регулярные выражения в C++26
stackOverflow 02.03.2025
Лексический анализ - ядро любого компилятора и инструмента обработки текста. Каждый программист сталкивается с задачами парсинга строк, обработки файлов конфигурации или анализа пользовательского. . .
|
Подробно о std::mdspan в C++23
stackOverflow 02.03.2025
Работа с многомерными массивами данных традиционно была одной из сложных задач в C++. Программистам приходилось создавать собственные абстракции или использовать сторонние библиотеки для эффективной. . .
|
Колмогоровская сложность в C++: Путь к совершенному коду
stackOverflow 02.03.2025
Абстрактная математическая теория Колмогорова стала мощным средством оценки и улучшения программного кода. Сложность алгоритма - не только в его вычислительной эффективности, но и в том, насколько. . .
|
Изменения в C# 14
stackOverflow 02.03.2025
Одно из самых значимых изменений в C# 14 - поддержка коллекционных выражений, которые позволяют создавать и инициализировать коллекции с помощью нового лаконичного синтаксиса. Это нововведение. . .
|
Разработка кроссплатформенного мобильного приложения для iOS/Android на C++
bytestream 02.03.2025
C++ как язык программирования высокого уровня с прямым доступом к аппаратным ресурсам позволяет создавать приложения, работающие одинаково быстро как на iOS, так и на Android устройствах. Ни для кого. . .
|
Аутентификация/авторизация на Golang
bytestream 02.03.2025
Go предлагает множество возможностей для создания надежных систем аутентификации. Встроенные криптографические пакеты, высокая производительность и простота параллельной обработки запросов делают его. . .
|
Нововведения TypeScript 5.8
bytestream 02.03.2025
TypeScript 5. 8 приносит много возможностей и оптимизаций, которые существенно расширяют границы типобезопасного программирования на JavaScript. Эта версия включает ряд значительных улучшений в работе. . .
|
Выполнение кода в игровом цикле Unity с использованием не-MonoBehaviour классов C#
bytestream 02.03.2025
Обычный подход к разработке игр на Unity тесно связан с использованием MonoBehaviour - базового класса для скриптов, обеспечивающего доступ к игровому циклу через события Update, FixedUpdate и. . .
|
Управление инстанцированием вложенных классов в C#
bytestream 02.03.2025
Вложенные классы в C# - мощное средство для создания тесно связанных типов данных и логики. Такие классы определяются внутри других классов и обеспечивают высокий уровень инкапсуляции, позволяя. . .
|