Форум программистов, компьютерный форум, киберфорум
C (Си)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 919
1

Программирование для dos4g.exe

17.12.2023, 16:59. Показов 2546. Ответов 26
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Программу компилирую с помощью Visual Studio 5.0

У меня есть dos4g.exe с примерами, я взял hello world пытаюсь компилировать. Мой BAT файл для компиляции следующий

Code
1
2
3
4
5
cl.exe /c /G3 /Z7 /I "C:\Program Files\DevStudio\VC\include" hello.c
 
link.exe /DEBUG /DEBUGTYPE:CV /SUBSYSTEM:CONSOLE /INCREMENTAL:NO /NOD /PDB:NONE /OUT:hello.exe /MAP:hello.map /DEF:hello.def /STUB:"D:\DOS4G\bin\pestub.exe" /LIBPATH:"C:\Program Files\DevStudio\VC\lib" hello.obj
 
pause
мой .def файл следующий

Code
1
2
3
4
5
6
7
NAME  HELLO
DESCRIPTION "PE C++ Hello World Example Program"
VERSION 1.0
CODE  PRELOAD MOVEABLE DISCARDABLE
DATA  PRELOAD SINGLE
EXPORTS
DOS4GOPTIONS
мой файл hello.c следующий (взят из примеров dos4g.exe поставки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/*
*  Standard Hello World program 
*  Copyright (c) 1996 Tenberry Software, Inc.
*  All Rights Reserved
*/
 
// Standard header files
#include <stdio.h>
 
// Test DOS4GOPTIONS string export by preventing the startup banner from 
// being displayed
char DOS4GOPTIONS[] =
    "dos4g=StartupBanner:OFF\n";
   
main(int ac, char **av)
{
    // Print the standard response to the screen
   printf("Hello, World!\n");
}
Ошибка на скриншоте. Что делать?

Программирование для dos4g.exe
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.12.2023, 16:59
Ответы с готовыми решениями:

Не запускаются AVZ. exe, CCleaner. exe, AutoLogger. exe, regedit. exe. Словил вирус bizigames
Доброго времени суток. Захотел я почистить комп от мусора всякого при помощи CCleaner, как не тут-то было. В общем, .exeшники...

Не запускаются AVZ. exe, CCleaner. exe, AutoLogger. exe, regedit. exe Дублируются процессы
Добрый день) не запускались экзешники перечисленные в топе, исправила кое как процессы chrome.exe, opera.exe, svchost.exe, explorer.exe...

Вмонтировать exe в файл для его блокировки на время работы exe
Как прикрепить (вмонтировать) exe к файлу, так чтобы до завершения этой программы содержимое файла не раскрывалось. Например,...

26
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 919
17.12.2023, 17:10  [ТС] 2
Добавлю что есть еще исходный файл (из поставки) Makefile для Polymake:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#  Hello world example makefile
#
#  Also shows example of exporting DOS4GOPTIONS
#
#  Built using MSVC\C++ v4.0 and MASM6.11 or Watcom 10.5 and WASM
#  Makefile scripted to use Polymake
#
#  Copyright (c) 1996 Tenberry Software, Inc.
#  All Rights Reserved
 
all : hellomcp.exe
 
4GDIR=.\DOS4G
 
PESTUB=$(4GDIR)\bin\pestub.exe
 
MSVC4Path="C:\MSVC"
 
MSVC4Env :
  @%setenv PATH=$(MSVC4Path)\BIN;$(MSVC4Path)\BIN\WIN95;$(MASM611Path)\bin;
  @%setenv INCLUDE=.;$(4GDIR)\INCLUDE;$(MSVC4Path)\INCLUDE;
  @%setenv LIB=$(4GDIR)\lib;$(MASM611Path)\lib;$(MSVC4Path)\LIB;
  @%setenv MSDEVDIR=$(MSVC4Path)
 
 
AOPTS = /coff /c
COPTS = /c /G3 /Z7 /I. /DMSVC40
LIBS = $(MSVC4Path)\LIB\LIBC.LIB $(4GDIR)\LIB\KERNEL32.LIB
 
.c.obj :
    @%do MSVC4Env
    :cl $(COPTS) $<
 
 
############################################################################
#                                                        
# Make Microsoft PE C++ HELLO objects and executables
#
############################################################################
 
hellomcp.exe : hellomcp.obj $(LIBS) hellomcp.def
    @%do MSVC4Env
    :link <@<
/DEBUG
/DEBUGTYPE:CV
/SUBSYSTEM:CONSOLE
/INCREMENTAL:NO
/NOD
/PDB:NONE
/OUT:$*.exe
/MAP:$*.map
/DEF:$*.def
/STUB:$(PESTUB)
$[m, *.obj, $**]
$[m, *.lib, $**]
<
   :$(4GDIR)\bin\pe2dbg $*.exe
    :$(4GDIR)\bin\w32patch -T $*.exe
 
hellomcp.obj : hello.c
    @%do MSVC4Env
    :cl $(COPTS) /Fohellomcp.obj $<
 
hellomcp.def: makefile
   @echo NAME  HELLOMCP                                     >  hellomcp.def
   @echo DESCRIPTION "PE C++ Hello World Example Program"   >> hellomcp.def
   @echo VERSION 1.0                                        >> hellomcp.def
   @echo CODE  PRELOAD MOVEABLE DISCARDABLE                 >> hellomcp.def
   @echo DATA  PRELOAD SINGLE                               >> hellomcp.def
   @echo EXPORTS                                            >> hellomcp.def
   @echo         DOS4GOPTIONS                               >> hellomcp.def
0
Модератор
2129 / 998 / 170
Регистрация: 23.07.2018
Сообщений: 3,348
Записей в блоге: 3
17.12.2023, 20:25 3
Цитата Сообщение от kurlyak Посмотреть сообщение
Ошибка на скриншоте. Что делать?
Для начала, как обычно, скопировать текст сообщения в свой вопрос.

Цитата Сообщение от kurlyak Посмотреть сообщение
(из поставки) Makefile для Polymake
Затем попробовать добавить следующие библиотеки или их аналоги:
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

Цитата Сообщение от politoto Посмотреть сообщение
Флажок /DMSVC40 компилятору не нужен?
Это мне вопрос? Там стоит вроде этот флажок. У меня 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
Модератор
2129 / 998 / 170
Регистрация: 23.07.2018
Сообщений: 3,348
Записей в блоге: 3
17.12.2023, 21:34 5
Цитата Сообщение от kurlyak Посмотреть сообщение
У меня VS5.0 а флажок как ясно для VS4.0. Надо его ставить или не надо?
Не знаю.
Похоже по настройку на особенности системы программирования. Посмотрите, там могут быть флажки для Watcom, Metowerks и др.

Добавлено через 2 минуты
Цитата Сообщение от kurlyak Посмотреть сообщение
и тут вылезла другая ошибка касательно pe2dbg.exe
pe2dbg.exe -> fatal error: File does not contain packed CV4.1 debug information.
Возможно, формат отладочной информации поменялся, а утилитка 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 я запускаю так

Code
1
dos4g.exe hello.exe
пишет

Unable to load requested program.

не работает вобщим.
0
Модератор
2129 / 998 / 170
Регистрация: 23.07.2018
Сообщений: 3,348
Записей в блоге: 3
18.12.2023, 13:29 7
Цитата Сообщение от kurlyak Посмотреть сообщение
пишет
Unable to load requested program.
Кроме сообщения, наверно, есть номер ошибки или %errorlevel%.
Может быть полезным, если ещё не надоело разбираться.

А вообще, в Windows 98 есть свой встроенный DPMI host, от которого всё пошло, и встроенный расширитель DOS/BIOS.
Можно попробовать программировать напрямую для него.

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
E ** A PE executable loader and the ability to build DOS/4G extended 
    applications with the Microsoft Visual C/C++ Version 4.0 and 4.1 
   compilers has been added to DOS/4G.  Please read the additonal 
   manual pamphlet which came with your v2.50 release disks for 
   directions on how to build PE applications.
    A number of new files are shipped on the disk to accomadate the
   new MSVC4.x support:
        PED32API.DLL : PE DLL of D32 API.
         PED32API.LIB : Import library for PED32API.DLL.
         KERNEL32.DLL : Replacement KERNEL32.DLL.
         PE2DBG.EXE  : Creates DBG and DBL files for PE executables.
         W32PATCH.EXE : Signature byte modifyer; PE<->PX, NE<->DX. Used
                            to allow our loader to get control under Win95 
                        and NT when running unbound applications.
         PESTUB.EXE   : PE specific stub built with MSC8.0.
      The examples have all been updated to be buildable with MSVC4.x.
PE2DBG.EXE нужен для отладчика, а W32PATCH.EXE для того, чтобы запускать бывшую PE-программу напрямую из проводника(чтобы запускался досовый STUB, а не точка входа Win32).

Без них явный запуск загрузчика DOS4G должен работать, если загрузчик специально не проверяет, что это не исходный PE, а пропатченный PX.

Добавлено через 2 часа 47 минут
В Dosbox .74-3 бесконечный цикл, собранный MSVC 2022, запустился.
Windows Batch file
1
2
echo int loop() { for(;;); } > loop.c
cl /MT loop.c   /link /nod /subsystem:console /entry:loop
Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
Оптимизирующий компилятор Microsoft (R) C/C++ версии 19.32.33333 для x86
(C) Корпорация Майкрософт (Microsoft Corporation).  Все права защищены.
 
loop.c
Microsoft (R) Incremental Linker Version 14.32.33333.0
Copyright (C) Microsoft Corporation.  All rights reserved.
 
/out:loop.exe
/nod
/subsystem:console
/entry:loop
loop.obj
DOS4g loop.exe
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
---(Register Overview                   )---
                                    EAX=00000000  ESI=00000000  DS=01B0   ES=01B0   FS=01C0   GS=0020   SS=01B0 Pr32
EBX=00000000  EDI=00000000  CS=01A8   EIP=00401003  C0 Z0 S0 O0 A0 P0 D0 I1 T0  
ECX=00000000  EBP=00502EBC  ss: b:00000000 type:12 parbg            
IOPL0  CPL0 EDX=00000000  ESP=00502EBC      l:FFFFFFFF dpl : 0 10011    177010897           
---(Code Overview   Scroll: up/down     )---                                    
01A8:401000  55                  push ebp
01A8:401001  8BEC                mov  ebp,esp
01A8:401003  EBFE                jmp  short 00401003 ($-2)   (up)
01A8:401005  5D                  pop  ebp
01A8:401006  C3                  ret
01A8:401007  0000                add  [eax],al
01A8:401009  0000                add  [eax],al
01A8:40100B  0000                add  [eax],al
 ---(OutPut/Input    Scroll: home/end    )---                                    
runs too fast try a fixed cycles amount in DOSBox's options.                     
176967647: BIOS:INT15:Unknown call BF01                                         
176967648: BIOS:INT15:Function 0x88 Remaining 0000 kb                           
176991949: FILES:file open command 0 file LOOP.EXE                              
176992086: FILES:file open command 0 file T:LOOP.INI                            
176999290: FILES:file open command 0 file LOOP.EXE


Добавлено через 1 час 20 минут
Входит и выходит...
C
1
2
3
4
5
/* dosexit.c */
// CL /MT dosexit.c   /link /nod /subsystem:console /entry:dosexit
int dosexit() { __asm mov eax, 0x4c31;
__asm int 33;
}
Windows Batch file
1
2
3
c:dos4g dosexit.exe
if errorlevel 49 echo 49
if errorlevel 50 echo 50
Code
1
2
3
4
T:\>c:dos4g dosexit.exe
T:\>if errorlevel 49 echo 49
49
T:\>if errorlevel 50 echo 50
1
Модератор
2129 / 998 / 170
Регистрация: 23.07.2018
Сообщений: 3,348
Записей в блоге: 3
18.12.2023, 14:27 8
Отладчик D32
Миниатюры
Программирование для dos4g.exe  
1
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 919
18.12.2023, 21:50  [ТС] 9
Цитата Сообщение от politoto Посмотреть сообщение
A PE executable loader and the ability to build DOS/4G extended
applications with the Microsoft Visual C/C++ Version 4.0 and 4.1
compilers has been added to DOS/4G. Please read the additonal
manual pamphlet which came with your v2.50 release disks for
directions on how to build PE applications.
Я полностью не цитировал, вы этот текст откуда взяли? Я так понял это из примеров VS4.0? В поставке VS4.0 если примеры для расширителя?
0
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 919
18.12.2023, 22:14  [ТС] 10
Давайте попробуем сначала.

Во первых, я создал по типу makefile из папки примера hello из поставки dos4g.exe - создал start.bat вот его код

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cl.exe /c /G3 /Z7 /I "C:\MSDEV\INCLUDE" /DMSVC40 /Fohello.obj hello.c
 
PAUSE
 
link.exe /DEBUG /DEBUGTYPE:CV /SUBSYSTEM:CONSOLE /INCREMENTAL:NO /NOD /PDB:NONE /OUT:hello.exe /MAP:hello.map /DEF:hello.def /STUB:pestub.exe libc.lib KERNEL32.LIB hello.obj
 
PAUSE
 
PE2DBG.EXE hello.exe
 
PAUSE
 
W32PATCH.EXE -T hello.exe
 
pause
Все делаю в Visual Studio 4.0 - и cl.exe и link.exe все из VS4.0 - я это все положил в отдельную папку и работаю что бы не засорять директории VS.

Запускаю этот bat file - все отлично компилируется, линкуеться, патчиться, создается hello.exe. Вот код hello.c (ниже)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/*
*  Standard Hello World program 
*  Copyright (c) 1996 Tenberry Software, Inc.
*  All Rights Reserved
*/
 
// Standard header files
#include <stdio.h>
 
// Test DOS4GOPTIONS string export by preventing the startup banner from 
// being displayed
char DOS4GOPTIONS[] =
    "dos4g=StartupBanner:ON\n";
   
void main(int ac, char **av)
{
    // Print the standard response to the screen
   printf("Hello, World!\n");
}
Компилируется - пишет ОК, линкуеться - пишет ОК, патчится и в результате hello.exe.

И тут я запускаю

dos4g.exe hello.exe

(тоже бат файл) и вот такой скрин:

Программирование для dos4g.exe


Я не знаю (см.выше в сообщениях) тот makefile что в папке с этим примером hello из dos4g.exe поставки - немного непонятный для polymake. Может я не правильно его разобрал и сделал свой start.bat.

Все это делаю под WinMe.

Кроме того обратите внимание на эту строку из link.exe

Code
1
/STUB:pestub.exe libc.lib KERNEL32.LIB hello.obj

Все эти три файла pestub.exe libc.lib KERNEL32.LIB лежат в папке с моим этим проектом. например KERNEL32.LIB этот файл из поставки dos4g.exe.
0
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 919
18.12.2023, 23:03  [ТС] 11
Цитата Сообщение от politoto Посмотреть сообщение
EBX=00000000 EDI=00000000 CS=01A8 EIP=00401003 C0 Z0 S0 O0 A0 P0 D0 I1 T0
ECX=00000000 EBP=00502EBC ss: b:00000000 type:12 parbg
IOPL0 CPL0 EDX=00000000 ESP=00502EBC l:FFFFFFFF dpl : 0 10011 177010897
---(Code Overview Scroll: up/down )---
01A8:401000 55 push ebp
01A8:401001 8BEC mov ebp,esp
01A8:401003 EBFE jmp short 00401003 ($-2) (up)
01A8:401005 5D pop ebp
01A8:401006 C3 ret
01A8:401007 0000 add [eax],al
01A8:401009 0000 add [eax],al
01A8:40100B 0000 add [eax],al
---(OutPut/Input Scroll: home/end )---
runs too fast try a fixed cycles amount in DOSBox's options.
176967647: BIOS:INT15:Unknown call BF01
176967648: BIOS:INT15:Function 0x88 Remaining 0000 kb
176991949: FILES:file open command 0 file LOOP.EXE
176992086: FILES:file open command 0 file T:LOOP.INI
176999290: FILES:file open command 0 file LOOP.EXE

Еще такой вопрос - это дизасемблированный код из DosBox? Как такое получить? Я скачал DosBox 0.74-3.
0
Модератор
2129 / 998 / 170
Регистрация: 23.07.2018
Сообщений: 3,348
Записей в блоге: 3
19.12.2023, 08:20 12
Цитата Сообщение от kurlyak Посмотреть сообщение
то дизасемблированный код из DosBox? Как такое получить?
Это стандартный отладчик, встроенный в 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 минут
Цитата Сообщение от kurlyak Посмотреть сообщение
вы этот текст откуда взяли?
Из release notes к версии, в которой Tenberry Software, Inc. добавила DOS/4G загрузчик из PE.

Добавлено через 28 минут
Цитата Сообщение от kurlyak Посмотреть сообщение
я создал по типу makefile из папки примера hello из поставки dos4g.exe
Уважаемый kurlyak, Вам-то зачем этот hellowolrd? Helloworld'ы не годятся даже для проверки работоспособности системы программирования.

Вы же сами писали:
Цитата Сообщение от kurlyak Посмотреть сообщение
при помощи 32 битной среды (например Borland C++ 5 Free 32 Compiler) создаю приложение myapp.exe, например такое:
C
1
2
3
4
5
6
7
8
9
10
11
int main ()
{
_asm {
 mov ax, 0x4f02
 mov bx, 0x101 //set resolution 640x480
 int 10h
 }
//далее просто вывожу линию на экране в режиме дисплея 640х480 пикселей
//далее устанавливаю снова текствый режим
return 0;
}
Далее я компилирую программу и запускаю расширитель с командной строки
dos4g.exe myapp.exe
Вот и проверяйте работоспосбоность функций 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? Например у меня в дизасемблере пишет

Assembler
1
cseg01:00038460 main_           proc near
как этот адрес 00038460 найти в DosBox debug?
0
250 / 180 / 29
Регистрация: 26.11.2022
Сообщений: 764
19.12.2023, 21:35 14
что-то у вас не то.
когда пишете под dos4g то весь ваш код сразу должен быть 32x битный - и стартовый тоже.
больше всего непонятно для чего такие извраты. хотите dos4g(w) используйте watcom
0
Модератор
2129 / 998 / 170
Регистрация: 23.07.2018
Сообщений: 3,348
Записей в блоге: 3
20.12.2023, 08:09 15
Цитата Сообщение от kurlyak Посмотреть сообщение
все сделал по инструкции к примеру из dos4g. И не работает. Среда для компиляции та что указана в инструкции dos4g - то есть VS4.0.
MS Visual C++ 4.0?
Если бы у заказчика была та же среда, что и у Вас, то Вам бы не пришлось сочинять батник.
Был бы готовый проект для MSVC++ 4.0 или .mak файл для сборки с помощью Microsoft NMake.
https://learn.microsoft.com/en... e-makefile

А у заказчика был PVCS Configuration Builder или что-то подобное. Иначе бы не возникали такие вопросы: Переделать makefile

Добавлено через 2 часа 9 минут
Цитата Сообщение от kurlyak Посмотреть сообщение
Все компилируется, линкуется и патчится без ошибок. Но не работает.
Отсюда какой можно сделать вывод?
Со сборкой HelloWorld'а Вы, вероятно, справились.
Это dos4g.exe не справился с загрузкой успешно собранной программы, о чём Вам и спообщил.

Попробуйте сделать "дистрибутив", в котором будут только те файлы, которые нужно передавать заказчику: модули программы, dos4g.exe и т.д.
Скопировать файлы "дистрибутива" в отдельную папку и запустить программу в отдельном dosbox'е.
0
Модератор
2129 / 998 / 170
Регистрация: 23.07.2018
Сообщений: 3,348
Записей в блоге: 3
20.12.2023, 08:24 16
Цитата Сообщение от kurlyak Посмотреть сообщение
Я запустил игру которая использует расширитель dos4gw.exe запустил в DosBox debug. Но у меня там в окне кода только 16ти битные регистры ax,cx и т.п. Это стартовый код я так понимаю?
Это Вы отлаживаете сам 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 по адресу

Assembler
1
cseg01:00038460 main_           proc near
Я ввел этот адрес в D32.exe так (смена CS:EIP)

G = 1:00038460

и тут D32.exe завершил работу, вылетел вобщим. Что за проблема? Как перейти на main()?
0
Модератор
2129 / 998 / 170
Регистрация: 23.07.2018
Сообщений: 3,348
Записей в блоге: 3
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

Программирование для dos4g.exe


Я пробовал ставить беркпоинт в d32.exe на этот адрес CS:IEP из скрина. Ставил так "BP 1:0003a574" пишет типа NULL в ответ на команду.

Потом я взял из IDA адрес main() как на скрине

Программирование для dos4g.exe


Посмотрел базоый адрес (начало вего кода) отмечен как 0x10000 - то есть я от адреса main() отнял 0x10000 и получил результат. Пробовал этот результат вводить как беркпоинт в d32.exe - тоже пишет в ответ на команду BP - результат NULL. Я там понял результат NULL после BP это значит кода по адресу нету.

Ну конечно entry point из первого скрина это одно, а main() из второго скрина - это другое, насколько я знаю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.12.2023, 14:18
Помогаю со студенческими работами здесь

Никак не могу установить WinHlp32.exe/WinHlp.exe для просмотра хелпника из ПО
Добрый день. Возникла проблема с Windows Serverv 2012 R2. Никак не могу установить WinHlp32.exe/WinHlp.exe для просмотра хелпника из ПО. ...

Как внедрить dll в exe, чтобы для работы программы нужен был только exe файл
как внедрить dll ссылку в exe, чтобы для работы программы нужен был только exe файл? Выдает ошибки: Ошибка 1 Не удается внедрить...

Как по exe файлу, получить список dll либ, которые qt exe программа требует для запуска?
Как по exe файлу, получить список dll либ, которые qt exe программа требует для запуска?

вирус calc.exe*32 notepad.exe*32 cmd.exe cannhost.exe
Здравствуйте. помогите решить проблему. При включении компьютера висят процессы calc.exe*32 notepad.exe*32 cmd.exe cannhost.exe. Завершаю...

Вирусы dwm.exe dllhost.exe ctfmon.exe svchost.exe
Проблема заключается в том что у меня на компьютере в диспетчере задач стоят задачи которые я не могу снять а именно: dwm.exe dllhost.exe...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Нестандартные приемы работы с итераторами в 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# - мощное средство для создания тесно связанных типов данных и логики. Такие классы определяются внутри других классов и обеспечивают высокий уровень инкапсуляции, позволяя. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru