Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 919

Определить регион адресов в сегменте данных

26.10.2023, 16:28. Показов 1952. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Например есть код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
 
int region1_start = 0;
 
int val1 = 0x55;
 
int val2 = 0x66;
 
int region1_end = 0;
 
int main(void)
{
 
    //размер региона в байтах
    int size = (char*)&region1_end - (char*)&region1_start;
 
    //просто какие то вычисления с переменными из региона
    int ret = val1 + val2;
 
    //выводим размер региона в байтах
    printf("%X\n", size);
 
    return 0;
}
Что мне надо - что бы в сегменте данных ЕХЕ файла была такая последовательноть (например 0х0 начало сегмента данных - для примера):

Code
1
2
3
4
0x0000 region1_start //смещение 0 байт
0x0004 val1 //смещение 4 байт
0x0008 val2 //смещение 8 байт
0x000C region1_end //смещение 12 байт
Есть такие то директивы компилятора или настройки Visual Studio что бы мне сделать такой регион памяти и int size было = 12?

То есть мне важна последовательность данных в сегменте данных сначала region1_start потом val1 потом за ней в сегменте данных val2 потом конец моих переменных region1_end.

Я просто скомпилировал код С++ выше, и посмотрел дизасемблером - компилятор С++ раскидал все 4 переменные по разным участкам сегмента данных. Мне нужна именно такая последовательность как я указал. Фактически мне надо пометить блок данных в сегменте данных.

Как это сделать? Заранее спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.10.2023, 16:28
Ответы с готовыми решениями:

Определить переменные в сегменте данных
Написать программу, где в сегменте данных будут созданы следующие переменные: Dec=65; Neg=-160; Bin1=0b1000111011; ...

Определить адрес в сегменте данных
Здравствуйте форумчане, необходима помощь с данным заданием : Определить адрес в сегменте данных переменной num на основе заданной...

Определить переменные в сегменте данных
Помогите написать программу, пожалуйста) Зарезервировать в сегменте данных: 1. 3 слова со значениями b88h, 1234h, e22h, присвоить...

28
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
26.10.2023, 19:53
Структуру используй.
2
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
26.10.2023, 21:27
Цитата Сообщение от nmcf Посмотреть сообщение
Структуру используй.
Или массив)
1
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 919
26.10.2023, 21:31  [ТС]
Спасибо.

А без структур другого выхода нету?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
26.10.2023, 22:15
Цель-то какая? Варианты предложили.
1
267 / 199 / 30
Регистрация: 26.11.2022
Сообщений: 862
26.10.2023, 22:46
можешь попробовать поиграться с назначением своих имён сегментов - но это для продвинутых случаев.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
27.10.2023, 01:07
kurlyak, если использовать массив и ссылки на его элементы то в пределах одной области видимости, компилятор скорее всего не создаст никаких указателей скрывающихся за этими ссылками:
C++
1
2
3
4
5
int vars[4];
int &region1_start = vars[0];
//тут две другие
int &region1_end = vars[3];
//далее при обращении к именам, компилятор будет работать непосредственно с элементами массива
А при передаче в функции принимающие ссылки или указатели, указатели всё едино появятся и при применении самостоятельных переменных. Не должно быть накладных расходов, вроде)
Но, присоединяюсь к вопросу. Зачем вам это надо?
1
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 919
27.10.2023, 10:37  [ТС]
Вобщим зачем мне это надо. Раскрываю секрет не по теме.

Есть одна старая компьютерная игра под MS DOS. Игра использует экстендер dos4gw.exe как ясно игра писалась на WATCOM С или С++. То есть если есть экстендер значит MS DOS игра использует 32 бит регистры eax, ebx, ecx и т.д а не 16 бит регистры ax, bx, cx и т.д.

Я дизасемблирую сейчас в IDA код этой игры. То есть у меня в IDA ассемблерный листинг. Кроме того я делаю паралельно декомпиляцию кода - то что есть в IDA в ассемблерном виде я перевожу в код на С++ - то есть пытаюсь декомпилировать эту игру под MS DOS - моя цель - скомпилировать свой код на С++ что бы игра работала как оригинальная.

И вот есть такое место и дизасемблированном коде - я выложу код на ассемблере из IDA.

Assembler
1
2
3
4
5
6
7
cseg01:000564EF                 mov     edx, offset Linear_Region_20_Start
cseg01:000564F4                 mov     eax, offset Linear_Region_20_End
cseg01:000564F9                 sub     eax, edx
cseg01:000564FB                 push    eax
cseg01:000564FC                 mov     eax, offset Linear_Region_20_Start
cseg01:00056501                 push    eax
cseg01:00056502                 call    Lock_Linear_Region_INT_31h
Assembler
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
cseg01:00056D2D Lock_Linear_Region_INT_31h proc near    ; CODE XREF: sub_4E387+4Cp
cseg01:00056D2D                                         ; Lock_Set_Of_Linear_Regions+21p ...
cseg01:00056D2D
cseg01:00056D2D arg_0           = word ptr  8
cseg01:00056D2D arg_2           = word ptr  0Ah
cseg01:00056D2D arg_4           = word ptr  0Ch
cseg01:00056D2D arg_6           = word ptr  0Eh
cseg01:00056D2D
cseg01:00056D2D                 push    ebp
cseg01:00056D2E                 mov     ebp, esp
cseg01:00056D30                 push    esi
cseg01:00056D31                 push    edi
cseg01:00056D32                 push    ebx
cseg01:00056D33                 push    ecx
cseg01:00056D34                 push    fs
cseg01:00056D36                 push    gs
cseg01:00056D38                 push    es
cseg01:00056D39                 mov     cx, [ebp+arg_0] ; low 2 bytes address of linear region
cseg01:00056D3D                 mov     bx, [ebp+arg_2] ; high 2 bytes address of linear region
cseg01:00056D41                 mov     di, [ebp+arg_4] ; low 2 bytes size of linear region
cseg01:00056D45                 mov     si, [ebp+arg_6] ; high 2 bytes size of linear region
cseg01:00056D49                 mov     ax, 600h
cseg01:00056D4D                 int     31h             ; DPMI Services   ax=func xxxxh
cseg01:00056D4D                                         ; LOCK LINEAR REGION
cseg01:00056D4D                                         ; BX:CX = starting linear address
cseg01:00056D4D                                         ; SI:DI = size of region in bytes
cseg01:00056D4D                                         ; Return: CF set on error
cseg01:00056D4D                                         ; CF clear if successful
cseg01:00056D4F                 mov     eax, 0
cseg01:00056D54                 jnb     short loc_56D5F
cseg01:00056D56                 nop
cseg01:00056D57                 nop
cseg01:00056D58                 nop
cseg01:00056D59                 nop
cseg01:00056D5A                 mov     eax, 1
cseg01:00056D5F
cseg01:00056D5F loc_56D5F:                              ; CODE XREF: Lock_Linear_Region_INT_31h+27j
cseg01:00056D5F                 pop     es
cseg01:00056D60                 pop     gs
cseg01:00056D62                 pop     fs
cseg01:00056D64                 pop     ecx
cseg01:00056D65                 pop     ebx
cseg01:00056D66                 pop     edi
cseg01:00056D67                 pop     esi
cseg01:00056D68                 pop     ebp
cseg01:00056D69                 retn
cseg01:00056D69 Lock_Linear_Region_INT_31h endp
Assembler
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
dseg05:000C85BC Linear_Region_20_Start db    0          ; DATA XREF: Lock_Set_Of_Linear_Regions:loc_564EFo
dseg05:000C85BC                                         ; Lock_Set_Of_Linear_Regions+346o ...
dseg05:000C85BD                 db    0
dseg05:000C85BE                 db    0
dseg05:000C85BF                 db    0
dseg05:000C85C0 dword_C85C0     dd 0                    ; DATA XREF: sub_57539:loc_5763Aw
dseg05:000C85C0                                         ; sub_57539+28Er
dseg05:000C85C4 dword_C85C4     dd 0                    ; DATA XREF: sub_57539+C0w
dseg05:000C85C4                                         ; cseg01:0005AC4Ar ...
dseg05:000C85C8 dword_C85C8     dd 0                    ; DATA XREF: sub_57539+B4w
dseg05:000C85C8                                         ; sub_57539+C8r ...
dseg05:000C85CC dword_C85CC     dd 0                    ; DATA XREF: sub_57539+286w
dseg05:000C85CC                                         ; sub_57539+29Cr ...
dseg05:000C85D0 dword_C85D0     dd 0                    ; DATA XREF: sub_57539+ECw
dseg05:000C85D0                                         ; sub_57539+346r ...
dseg05:000C85D4 dword_C85D4     dd 0                    ; DATA XREF: sub_57539+26Dw
dseg05:000C85D4                                         ; sub_57539+2ADr ...
dseg05:000C85D8 dword_C85D8     dd 0                    ; DATA XREF: sub_57539+214w
dseg05:000C85D8                                         ; cseg01:0005AEAFr ...
dseg05:000C85DC dword_C85DC     dd 0                    ; DATA XREF: sub_57539:loc_57779w
dseg05:000C85DC                                         ; cseg01:0005AEB5r ...
dseg05:000C85E0 word_C85E0      dw 0                    ; DATA XREF: sub_57539+246w
dseg05:000C85E2                 align 4
dseg05:000C85E4 dword_C85E4     dd 0                    ; DATA XREF: sub_57539:loc_57653w
dseg05:000C85E4                                         ; sub_57539+131w ...
dseg05:000C85E8                 db    0
dseg05:000C85E9                 db    0
dseg05:000C85EA                 db    0
dseg05:000C85EB                 db    0
dseg05:000C85EC dword_C85EC     dd 0                    ; DATA XREF: sub_57539:loc_57921w
dseg05:000C85F0 dword_C85F0     dd 1FFFh                ; DATA XREF: sub_57539+15Dw
dseg05:000C85F0                                         ; sub_57539+19Ew ...
dseg05:000C85F4 dword_C85F4     dd 1FFFh                ; DATA XREF: sub_57539+16Dw
dseg05:000C85F4                                         ; sub_57539+1AEw ...
dseg05:000C85F8                 db    0
dseg05:000C85F9                 db    0
dseg05:000C85FA                 db    0
dseg05:000C85FB                 db    0
dseg05:000C85FC dword_C85FC     dd 0                    ; DATA XREF: sub_57539+263w
dseg05:000C85FC                                         ; sub_57539+27Fr ...
dseg05:000C8600 Linear_Region_20_End db    0            ; DATA XREF: Lock_Set_Of_Linear_Regions+33Eo
И вот видите, в сегменте данных есть Linear_Region_20_Start и Linear_Region_20_End - это две метки которые метят адреса - начало и конец блока памяти в сегменте данных. Потом вычисляется разница между адресами - то есть размер блока памяти (и запихивается в стек):

Assembler
1
2
3
4
cseg01:000564EF                 mov     edx, offset Linear_Region_20_Start
cseg01:000564F4                 mov     eax, offset Linear_Region_20_End
cseg01:000564F9                 sub     eax, edx
cseg01:000564FB                 push    eax
Далее как видно начало блока памяти записывается в стек:

Assembler
1
2
cseg01:000564FC                 mov     eax, offset Linear_Region_20_Start
cseg01:00056501                 push    eax
И далее вызывается INT 31h ax=600h - это прерывание делает блокировку этого участка памяти, т.е. система теперь не может выгрузить этот блок памяти в своп на диск и этот блок постоянно надходится в памяти ПК. Это прерывание не важно для меня. Я его вызову при помощи __asm {} мне главное пометить начало блока и конец блока в сегменте данных.

И как это сделать на С++? Игра эта писалась в 96 году на С/С++. Так программист сделал это. Теперь мне надо сделать так само - пометить в моем С++ коде Linear_Region_20_Start и Linear_Region_20_End.

Добавлено через 7 минут
Просто игра писалась на С++ WATCOM так как в папке с игрой dos4gw.exe это ваткомовский расширитель (идет вместе с компилятором).

Видимо в самом деле Linear_Region_20_Start и Linear_Region_20_End прийдется переделать в начало и конец структуры.
0
267 / 199 / 30
Регистрация: 26.11.2022
Сообщений: 862
27.10.2023, 13:11
соберите данные в структуру и передавайте указатель на неё и её размер.
все равно для общения с оборудованием надо знать точные адреса всех полей и блочиться будет на уровне страниц по 4к.

и в составе WATCOM был нормальный дисассемблер . по крайней мере я раньше им декомпилил игрульки и изучал.

и ещё - ватком хорошо оптимизирует код - особенно если была включена опция нестандартной быстрой передачи параметров ))
2
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 919
27.10.2023, 14:21  [ТС]
Цитата Сообщение от Aledveu Посмотреть сообщение
в составе WATCOM был нормальный дисассемблер
А где там дизассемблер? Прямо в IDE? Какое меню? Я что то не встречал. У меня вот такой вот WATCOM

open-watcom-c-win32-1.9.exe

где там дизассемблер в IDE?
0
267 / 199 / 30
Регистрация: 26.11.2022
Сообщений: 862
27.10.2023, 16:16
в иде там ничего нету - смотри отдельные утилиты.
и я не знаю насколько порезали open watcom по сравнению с watcom 11 (я в ней работал когда под dos4gw писал).
1
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 919
27.10.2023, 18:47  [ТС]
Цитата Сообщение от Aledveu Посмотреть сообщение
я в ней работал когда под dos4gw писал
А где вы брали доки по dos4gw? У вас нету случайно pdf например?
0
267 / 199 / 30
Регистрация: 26.11.2022
Сообщений: 862
27.10.2023, 19:37
kurlyak, в те времена интернета особо не было ))
чтобы вы понимали - watcom С 11 - это 1997 год
так что грызли доки которые шли на компакт диске, примеры программ.

типа такого:
Кликните здесь для просмотра всего текста
C
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
/*
    MEMORY.C - This example shows how to get information
    about free memory using DPMI call 0500h under DOS/4GW.
    Note that only the first field of the structure is
    guaranteed to contain a valid value; any field that
    is not returned by DOS/4GW is set to -1 (0FFFFFFFFh).
 
    Compile & Link: wcl386 /l=dos4g memory
 */
#include <i86.h>
#include <dos.h>
#include <stdio.h>
 
struct meminfo {
    unsigned LargestBlockAvail;
    unsigned MaxUnlockedPage;
    unsigned LargestLockablePage;
    unsigned LinAddrSpace;
    unsigned NumFreePagesAvail;
    unsigned NumPhysicalPagesFree;
    unsigned TotalPhysicalPages;
    unsigned FreeLinAddrSpace;
    unsigned SizeOfPageFile;
    unsigned Reserved[3];
} MemInfo;
 
#define DPMI_INT    0x31
 
void main()
{
    union REGS regs;
    struct SREGS sregs;
 
    regs.x.eax = 0x00000500;
    memset( &sregs, 0, sizeof(sregs) );
    sregs.es = FP_SEG( &MemInfo );
    regs.x.edi = FP_OFF( &MemInfo );
 
    int386x( DPMI_INT, &regs, &regs, &sregs );
    printf( "Largest available block (in bytes): %lu\n",
        MemInfo.LargestBlockAvail );
    printf( "Maximum unlocked page allocation: %lu\n",
        MemInfo.MaxUnlockedPage );
    printf( "Pages that can be allocated and locked: %lu\n",
        MemInfo.LargestLockablePage );
    printf( "Total linear address space including allocated"
        " pages: %lu\n", MemInfo.LinAddrSpace );
    printf( "Number of free pages available: %lu\n",
         MemInfo.NumFreePagesAvail );
    printf( "Number of physical pages not in use: %lu\n",
         MemInfo.NumPhysicalPagesFree );
    printf( "Total physical pages managed by host: %lu\n",
         MemInfo.TotalPhysicalPages );
    printf( "Free linear address space (pages): %lu\n",
         MemInfo.FreeLinAddrSpace );
    printf( "Size of paging/file partition (pages): %lu\n",
         MemInfo.SizeOfPageFile );
}


Кликните здесь для просмотра всего текста
C
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
/*
    SCREEN.C - This example shows how to write directly
    to screen memory under the DOS/4GW dos-extender.
 
    Compile & Link: wcl386 /l=dos4g SCREEN
 */
#include <stdio.h>
#include <dos.h>
 
/*
    Under DOS/4GW, the first megabyte of physical memory - the
    real memory - is mapped as a shared linear address space.
    This allows your application to access video RAM using its
    linear address.  The DOS segment:offset of B800:0000
    corresponds to a linear address of B8000.
 */
#define SCREEN_AREA 0xb800
#define SCREEN_LIN_ADDR ((SCREEN_AREA) << 4)
#define SCREEN_SIZE 80*25
 
void main()
{
    char       *ptr;
    int     i;
 
    /* Set the pointer to the screen's linear address */
    ptr = (char *)SCREEN_LIN_ADDR;
    for( i = 0; i < SCREEN_SIZE - 1; i++ ) {
    *ptr = '*';
    ptr += 2 * sizeof( char );
    }
}


ну и само собой книжка БСП том 6.

сейчас http://rgmroman.narod.ru/Dos4g.htm#ch_3
https://web.archive.org/web/20... index.html

ну и опят таки это был ДОС. библиотек никаких небыло как сейчас - всё ручками писали.
Благо DOS4GW был практически прозрачый с точки зрения взаимодействия с ОС.
1
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
27.10.2023, 20:10
kurlyak, а зачем это нужно-то? За такое деньги платят?
1
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 919
28.10.2023, 09:48  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
kurlyak, а зачем это нужно-то? За такое деньги платят?
У меня просто хобби ретро девелопмент за 90е года )


Цитата Сообщение от Aledveu Посмотреть сообщение
книжка БСП том 6.
Очень интересно, что такое БСП? Я скачал себе уже WATCOM C++ 11 но пока не смотрел. То есть вместе с инсталяций WATCOM C++ 11 шли примеры программ, я так понял?
1
267 / 199 / 30
Регистрация: 26.11.2022
Сообщений: 862
28.10.2023, 10:53
БСП - https://www.frolov-lib.ru/bsp.html

было несколько примеров которые позволяли понять что особых отличий между обычным ДОС и досэкстендером нет.
дос экстендер транслировал прерывания в реальный режим и обратно, так что мышь работала, видео режимы переключались. неудобно было только данные подготавливать для этих прерываний если их надо было в реальной памяти размещать.
1
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 919
28.10.2023, 16:01  [ТС]
Спасибо!

Я сейчас как раз читаю БСП том 6.
0
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 919
29.10.2023, 12:11  [ТС]
Цитата Сообщение от Aledveu Посмотреть сообщение
и ещё - ватком хорошо оптимизирует код - особенно если была включена опция нестандартной быстрой передачи параметров
Это имеется ввиду передача параметров через регистры? Но там же вроде надо __fastcall указывать в объявлении функции. Или можно в настройках компилятора WATCOM это указать в смысле __fastcall?
0
267 / 199 / 30
Регистрация: 26.11.2022
Сообщений: 862
29.10.2023, 12:55
Можно в опциях компилятора указать что надо использовать передачу через регистры.
помимо этого ваткомовский компилятор требует чтобы вы выключили отладочную информацию для работы оптимизатора.
с включенной отладочной информацией он практически не оптимизирует код.
1
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 919
01.11.2023, 14:31  [ТС]
А вот еще такой вопрос по этой теме. Кто смотрел ассемблерный код выше? Вобщим в программе при помощи int 31h ax = 600h определяется 16 регионов для кода, и 4 региона для данных. Для данных в сегменте данных как ясно структура используется. Для кода что то вроде этого:

C++
1
2
3
4
5
6
7
8
9
10
11
void Func_Start_Region_1()
{
}
 
//тут разные функции программы, их много
 
void Func_End_Region_1()
{
}
 
DWORD size = (DWORD)Func_End_Region_1 - (DWORD)Func_Start_Region_1;
И вобщим у нас есть начало региона в сегменте кода Func_Start_Region_1 и его размер size. И так для всех 16-ти регионов в сегменте кода вызывается int 31h ax=600h.
Вопрос - зачем создавать 16 линейных регионов в сегменте кода, если эти все программные функции что в этих 16ти регионах можно просто создать в 1-ном регионе. Зачем разбивать код? Что было задумано программистом который писал такой код?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.11.2023, 14:31
Помогаю со студенческими работами здесь

Определить адрес в сегменте данных
Здраствуйте! помогите решить такое задание, писать никаких програм не нужно: Определить адрес в сегменте данных переменной NUM на...

Определить переменные в сегменте данных
Проверьте, пожалуйста, мое решение. 1.в сегменте данных резервируется память под следующие данные: T1- 1 байт без инициал-и, T2- 4 слова...

В сегменте данных определить три области
Нужна помощь по выполнению данного задания.Совсем недавно начали изучать ассемблер.Еще не совсем понимаю как там все устроено. ...

Определить в сегменте данных массив чисел
Прошу вашей помощи, в моей задаче необходимо определить в сегменте данных массив чисел. Увеличить отрицательные элементы на 10, уменьшить...

Определить адрес переменной в сегменте данных по коду инструкции
Определить адрес в сегменте данных переменной num на основе заданной команды базового процессора Ix86 add ax, num + (9 or 2) с машинным...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Ниже машинный перевод статьи The Thinkpad X220 Tablet is the best budget school laptop period . Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы,. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru