- •Структура платформы .NET
- •Схема выполнения программы в .NET
- •Схема работы компиляторов .NET
- •Достоинства языка С++
- •Структура программы
- •Модификаторы памяти
- •Пространство имен
- •Константы
- •Описание идентификаторов
- •Операции С++
- •Правила преобразования типов
- •Функции
- •ПЕРЕГРУЗКА ФУНКЦИЙ
- •Неоднозначность перегрузки
- •Шаблоны функций
- •Явная спецификация типов
- •Оперативная память
- •В адресном пространстве каждого процесса содержится:
- •Виртуальная память может находиться в трех состояниях
- •Средства защиты памяти
- •Страничное преобразование
- •ПРИМЕР РАБОТЫ С УКАЗАТЕЛЯМИ
- •Еще один пример с указателями
- •Утечки памяти
- •Процесс сборки мусора
- •Сборка мусора. Поколения объектов
- •Особенности ОС Windows
- •Процесс и поток
- •Очереди сообщений
- •Структура сообщения
- •Cпособы создания интерактивных Win приложений в VS C++
- •Функция WinMain
- •Создание окна
- •Функция окна
- •Цикл обработки сообщения
- •Определение запущенной копии приложения
- •Пример приложения
- •Команды передачи данных
- •Арифметические команды:
- •Каркас программы
- •Стековый фрейм
- •Парадигмы программирования
- •Элементы объектной модели
- •Преимущества объектной модели
- •Ограничения доступа
- •Спецификатор памяти static
- •Спецификатор const
- •Указатель this
- •Дружественные функции
- •Основные свойства и правила использования спецификатора friend:
- •Наследование
- •Основные правила использования базовых и производных классов:
- •Наследование атрибутов компонентов базового класса:
- •Множественное наследование
- •Использование виртуального класса
- •Полиморфизм
- •ПРОЦЕСС
- •Структура процесса
- •Поток (thread)
- •Создание и работа с потоками
- •Создание потока
- •Завершение потока
- •Совместимость потоков и стандартной библиотеки
- •Синхронизация потоков ПРИМЕР1
- •Как можно приостановить работу потока?
- •ПРИМЕР 2
- •Объекты синхронизации
- •Мьютекс. ПРИМЕР3
- •Критические секции ПРИМЕР4
- •События. ПРИМЕР5
- •Семафоры. ПРИМЕР6
- •Структура описания технологической операции
- •Типы программ
- •Жизненный цикл программного обеспечения
- •Структура процессов ЖЦПО
- •Стратегии конструирования ПО
- •Водопадная модель ЖЦПО
- •Макетирование
- •Спиральная модель БОЭМА
- •Инкрементальная модель
- •Модель быстрой разработки приложений (RAD)
- •Схема процесса XP.
- •Эксплуатационные требования к программным продуктам
Цикл обработки сообщения
MSG msg
while (GetMessage (&msg,NULL,0,0))
{TranslateMessage(&msg); DispatchMessage(&msg)
}
Обрабатываемыесообщения: При создании окна WM_CREATE,
WM_GETMINMAXINFO WM_NCCREATE WM_PAINT WM_QUIT
WM_QUERYENDSESSION
Определение запущенной копии приложения
HWND FindWindow
( LPCTSTR lpClassName, LPCTSTR lpWindowName);
BOOL IsIconic (HWND hwnd);
BOOL SetForegroundWindow (HWND hwnd);
Пример приложения
LRESULT WINAPI WndProc(HWND hWnd, UINTmsg, WPARAM wParam, LPARAM lParam);
szAppName[] = "Window";
char szAppTitle[] = "Window Application";
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{WNDCLASSEX wc; HWND hWnd; MSG msg;
hInst = hInstance;
hWnd = FindWindow(szAppName, NULL); if (hWnd)
{ if (IsIconic(hWnd)) ShowWindow(hWnd, SW_RESTORE); SetForegroundWindow(hWnd); return FALSE;
}
Созданиеглавногоокнаприложения и цикл обработки сообшений hWnd = CreateWindow(szAppName,
szAppTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInst,
NULL);
if(!hWnd) return(FALSE); ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); while(GetMessage (&msg, NULL, 0, 0)) { TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
•Подготовка текста приложения на языке программирования.
•Трансляция в .obj файл
•Компоновка .exe файла
Статическая библиотека |
|
||||
|
|
|
|
Копия добавляется в каждую |
|
|
|
|
|
|
|
|
|
|
|
программу во время компоновки |
Программа 2.ехе |
|
|
Библиотечная |
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
функция А() |
|
Программа 1.ехе |
|
|
|
|
|
|
Библиотечная функция А()
Библиотечная функция А()
Процесс 1 |
|
|
|
Процесс 2 |
|
|
|
|
1. В заголовочном файле определятся экспортируемые функции
MyDLL.h
EXPORT extern “C” __declspec (dllexport) int CALLBACK
2. |
Раздел экспорта |
MyFunc (char *str); |
||||
|
|
|||||
|
ordinal |
hint |
|
RVA |
name |
|
|
|
|
|
|
|
|
1 |
0 |
0001A3C6 |
Add |
|||
|
|
|
|
|
|
|
2 |
1 |
|
0001A367 |
MyFunc |
||
|
|
|
|
|
|
|
3. При создании исходного EXE – модуля необходимо определить внешнюю функцию
#include “MyDLL.h”
extern "C" __declspec(dllimport) MyFunc(char * str);
4.Компоновщик создает в конечном ЕХЕ-модуле раздел импорта
5.Прямой вызов функции
int iCode=MyFunc(“Hello”);
typedef HWND (WINAPI *MYDLLPROC) (LPSTR); MYDLLPROC GetWindow;
FARPROC MyPool; HANDLE hDLL;
hDLL = LoadLibrary("DLLDEMO.DLL"); if(hDLL != NULL)
{ MyPool = GetProcAddress(hLib, MAKEINTRESOURCE(8)); GetWindow = (MYDLLPROC) GetProcAddress(hDLL,
“MyFunc"); if(GetWindow!= NULL)
{
int Code=(* GetWindow )(“Hello”);// вызываем функцию
}
FreeLibrary(hDLL);
}
BOOL APIENTRY DllMain( HINSTANCE hinstDLL, DWORD fdwReason,
LPVOID lpvReserved);
Значение fdwReason |
Описание |
|
|
DLL_PROCESS_ATTACH |
Запуск процесса или вызов функции LoadLibrary |
|
|
DLL_THREAD_ATTACH |
Создана новая задача |
DLL_THREAD_DETACH Задача завершает свою работу не аварийным способом
DLL_PROCESS_DETACH Нормальное завершение процесса или вызова функции
FreeLibrary
Формат описания экспортируемой функции:
EXPORTS
ИмяТочкиВхода [=ВнутрИмя] [@Номер] [NONAME] [CONSTANT]
ПРИМЕР:
LIBRARY DLLNAME
DESCRIPTION 'DLL-библиотека DLLNAME‘
EXPORTS DrawBitmap=MyDraw @4 ShowAll
MyPoolPtr @5 CONSTANT
GetMyPool @8 NONAME MyFunc @9
Базовые регистры процессора
Intel Pentium
31 |
15 |
7 |
0 |
|
||
|
|
AH |
|
|
AL |
EAX |
|
|
BH |
|
|
BL |
EBX |
|
|
CH |
|
|
CL |
ECX |
|
|
|
|
|
|
|
|
|
DH |
|
|
DL |
EDX |
|
|
|
|
|
|
|
|
|
|
DI |
|
EDI |
|
|
|
|
|
|
ESI |
|
|
|
|
SI |
|
||
|
|
|
|
|
EBP |
|
|
|
|
BP |
|
||
|
|
|
|
|
|
|
|
|
|
SP |
|
ESP |
|
|
|
|
|
|
|
|
РЕГИСТРЫОБЩЕГО НАЗНАЧЕНИЯ
15 0
SS
DS
CS
ES
FS
GS
31 15
РЕГИСТРСЧЕТЧИК
СЕГМЕНТНЫЕ РЕГИСТРЫ
0
IP EIP
КОМАНД
31 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
|
|
|
OF |
DF |
|
|
SF |
ZF |
|
AF |
|
PF |
|
CF |
РЕГИСТР ФЛАГОВ
Адресация
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Непрямая |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
Прямая |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
регистровая |
|
|
|
|
|
|
|
|
|
косвенная |
|
|
|
||||||||||||
|
|
|
|
|
|
|
непосредственная |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MOV ax,14h |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MOV ax,[1CD5h] |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
MOV bx, mem1 |
|
|
|
|
|
|
|
|
MOV ax, [bx] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
регистровая |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
базовая |
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(отгносительная) |
|
|
|
|
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Индексная |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
MOV ax,bx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MOV ax, [bp]+5 |
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MOV ax,[bp][5] |
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
абсолютная |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
неявная |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
стековая |
|
|
|
|
|
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ADD ax, [si+2] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
JMP 0x12345678 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
POP bp |
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
LOOP |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ЕА = база + (индекс*множитель)+смещение
Примерпрямой адресации
mov BP,SP
mov AX,4C00h |
|
mov DX, offset mas |
|
mass db250 dup(‘*’) |
|
mov DL,'!‘ |
|
mem1 DW 1D7Fh |
|
mov ax,mem1 |
|
mem1 DD EC341D7Fh |
|
mov ax, wordptrmem1 |
;ax=1d7f |
mov bx, wordptrmem+2 |
;bx=ec34 |
>
Младший |
Старший |
||
байт |
байт |
|
|
|
|
|
|
7F |
1D |
34 |
EC |
|
|
|
|
Пример косвеннойадресации
mem1 DW 1D7Fh lea bx,mem1 mov ax,[bx]
1СВ6 1CB7
7F 1A
bx |
ax |
1CB6 |
1A7F |
mov DX,[ВР] mov AL, [DI]
s1 DB “String 1” |
|
lea EBX,s1 |
|
mov al, byte ptr[EBX][5] |
;al=”g” |
mas db1,2,5,3,7,9,8,3,4 |
|
mov BX,2 |
|
mov DL,mas[BX] ;dl=5 |
|
Такой же результат даст такая последовательность команд:
mov BХ,offset mas |
|
mov DL,2[BX] |
; mov DL, [ВХ+2] mov DL, [ВХ]+2 |