утилиты резервного копирования, антивирус, win zip, norton antivirus, avast edition, .

cyberdnk.narod.ru

 
 На сайте
   Главная
   Links

 Разделы
архиватор win rar
текстовые редакторы
антивирус панда
avast 4 professional
nod32
домашняя бухгалтерия
англо русский словарь
symantec antivirus
symantec
symantec
Навигационные системы
 Главная  Links
{img1} win архиваторы
Память можно не освобождать с помощью инструкции RET N, т.к. текущая вершина стека не содержит адрес возврата! В большинстве компиляторов с языков высокого уровня предпоч- тительным способом хранения локальных данных является использова- ние этой "временной" памяти в стеке.
win архиваторы
{img2} nod32
Переменные, помещаемые в этот тип памяти, иногда упоминаются как локальные, динамические или автоматические переменные. Листинг 2-8 представляет типичную последовательность событий, происходящих на входе типичных прог- рамм на языке высокого уровня.
nod32
{img3} немецко русский словарь
Процедура устанавливает новый блок данных (сохранение регистра BP и установка регистра BP в текущем SP), распределяет локальную память (вычитает из SP) и сохраняет регистры, которые она может разрушить. Рис. 2-1 представляет структуру стека, как она выглядит внут- ри программы Example (пример), и показывает как шаблон Stackframe (блок данных стека) выравнивается вместе со стеком.
програмное обеспечение

архиватор rar

утилиты резервного копирования, антивирус, win zip, norton antivirus, avast edition, .
 

программы архиваторы

... ; Вызываемая процедура Stackframe STRUC ; определение шаблона структуры стека LocWord dw ? ; локальная переменная Word (слово) LocChar db 14 dup (?) ; локальный массив символов LocIndx dw ? ; другая локальная переменная Word XamplBP dw ? ; сохраняемое значение BP dw ? ; адрес возврата (NEAR call) Param1 dw ? ; 1-й параметр (передан последним) Param2 dw ? ; 2-й параметр Param3 dw ? ; 3-й параметр (передан первым) Stackframe END ; конец определения шаблона ; base EQU [bp - offset XamplBP] ; выравнивание BP с шаблоном ; Example PROC NEAR ; начало процедуры push bp ; сохранение старого указателя базы mov bp,sp ; выравнивание Stackframe со стеком sub sp,offset XamplBP ; резервирование памяти в стеке push si ; сохранение используемых регистров push di ... ... ... mov si,base.Param1 ; доступ к 1-му параметру mov al,base.LocWord ; доступ к локальным переменным ... ... ... pop di ; восстановление сохраненных регистров pop si ; mov sp,bp ; удаление локальных переменных pop bp ; восстановление первоначального BP ret ; возврат без очистки Example ENDP ; конец процедуры Example (пример) - 2-27 - Т.к. структура Stackframe определяется в текущем сегменте, нет необходимости перекрывать сегмент. Если используется смещение из другого сегмента, как например, при попытке использования шаб- лона из другого сегмента данных, то в ссылке необходимо использо- вать конструкцию SS: override (заместить). Отказ от выполнения этого требования приводит к выдаче сообщения об ошибке в макроас- семблере MASM "Can't reach with segment reg" (невозможно найти регистр сегмента). Если когда-либо появится это сообщение, то оно означает, что для определения сегмента, к которому осуществляется доступ, текущий сегмент не принят во внимание и нужно решать эту проблему. Если в стеке распределяется локальная память, то перед воз- вратом управления из программы она должна быть освобождена. Это можно выполнить путем добавления размера локальной памяти к стеку (возвращение к прежнему состоянию sub sp,offset bp или восстанов- ление регистра BP из сохраненного значения (mov sp,bp)).


операционная система windows


 
http://www.e-katalog.com.ua/export_rss.php?zone_=ua&n_=5&categories_=1,5,
 

CNews: Новости | e-Business | Hi-Tech | Telecom List.ru - каталог ресурсов интернет Directrix џ­¤ҐЄб жЁвЁа®ў ­Ёп
Hosted by uCoz
Контроль стертого подкаталога Управление любым типом дискового носителя операционной системы MS-DOS (гибкие диски, жесткие диски, сменные кассеты) Компилирование компилятором "Си" "фирмы "Майкрософт": cl /c /Zp1 /AS /GO /Ze /Ot rescue2.c Редактирование редактором фирмы "Майкрософт": Link /Dosseg/MA/LI/CPAR:1/STACK:4096 rescue2,rescue2.exe, rescue2.map,slibce; ********************************************************* /* В К Л Ю Ч Е Н Н Ы Е Ф А Й Л Ы */ #include /*для функции printf() и еще многих*/ #include /*для getch() */ #include /*для intdos(),int86(), и так далее*/ #include /*для _fmalloc ()& malloc */ #include /*для memory "mem...()" и str..."*/ #iclude /*для topper() and "есть...()" */ #include /*для getcwd() */ /* О П Р Е Д Е Л Е Н И Е К О Н С Т А Н Т */ #define FALSE 0 /* эти определения предназначены*/ #define TRUE 1 /* для того, чтобы сделать програм-*/ #define AND && /* му более читаемой и понятной*/ #define OR ¦¦ #define EQ == #define NE != #define LE <= #define ABS_READ 0x25 /* прерывание чтения диска */ #define ABS_WRITE 0x26 /* прерывание записи на диск */ /* Функции прерываний "int 21h" операционной системы DOS:*/ #define DFUNC_RESETDSK 0x0D /* сброс дисковода */ #define DFUNC_GETDISK 0x19 /* получить текущий дисковод */ #define DFUNC_GETDPB 0x32 /* получить блок дисковых */ /* параметров */ #define DFUNC_GETCD 0x47 /* получить текущий дисковод */ - 11-59 - /* Биты атрибутов файла операционной системы DOS: */ #define FATR_NONE 0x00 /* соответствует ANY */ #define FATR_READ 0x01 /* только для чтения */ #define FATR_HIDDEN 0x02 /* скрытый */ #define FATR_SYSTEM 0x04 /* файл системы */ #define FATR_VOLUME 0x08 /* метка тома */ #define FATR_SUBDIR 0x10 /* подкаталог */ #define FATR_ARCHIV 0x20 /* архивированный файл */ #define CL_OFF 2 /* первым номером кластера */ /* является число 2*/ #define TENMB 20740L /* максимальное количество */ /* секторов, поддерживаемых */ /* 12-битовой таблице FAT */ #define CHAIN_END 1 /* используется функцией */ /* "get_cluster ()" для */ /* обозначения конца файла*/ #define FILE_END 0xfff8 /* элемент таблицы FAT для */ /* конца файла */ /* стандартная программа match() для совпадающих типов*/ #define NO_MATCH 0 /* не совпадают*/ #define IS_MATCH 1 /* совпадают */ #define IS_ERASED 2 /* со стертыми файлами */ #define IS_UNIQUE 4 /* со нестертыми файлами */ #define DNAME_SIZE 80 /* максимальный размер имени в */ /* каталоге */ /* ОПРЕДЕЛЕНИЕ СТРУКТУР И ТИПОВ */ typedef unsigned int BOOL; typedef unsigned char BYTE; typedef unsigned int WORD; typedef unsigned long DWORD; typedef union { BYTE far * ptr; struct { WORD off ; WORD seg ; } a; } LONGPTR ; typedef struct dpbbuf { /* буфер блока дисковых пара- */ /* метров */ BYTE PhysDrive; /* номер дисковода */ Byte DriverUnit ; /* номер узла в пределах дис- */ /* ковода */ WORD BytesSector ; /* количество байтов в секторе */ BYTE SectorsCluster ; /* количество секторов в кластере /* минус 1 */ BYTE ClusterShift; /* сдвиг кластера */ WORD Reserve; /* количество зарезервированных /* секторов */ BYTE NumberOfFATs; /* копии таблицы FAT */ WORD DirEntries; /* количество элементов корне- */ /* вого каталога */ WORD DataSect; /* первый сектор данных */ - 11-60 - WORD TotClust; /* общее количество кластеров */ /* плюс 1 */ BYTE nFATsec; /* количество секторов таблицы */ /* FAT (1 таблица FAT) */ WORD DirSect; /* номер сектора каталога */ DWORD DevHeaderAddr; /* адрес головки дисковода */ BYTE MediaByte; /* байт описателя носителя */ BYTE DiskAccFlag; /* признак доступа к диску */ DWORD NextBlockAddr; /* адрес следующего блока диска */ } DPB; typedef struct dirbuf { /* элемент каталога диска */ char name [8]; /* имя */ char ext [3]; /* расширение */ BYTE attrib ; /* атрибут */ BYTE reserved [10]; WORD time ; /* время: часы минуты- */ /* -минуты секунды */ WORD date ; /* дата: год месяц-месяц день */ WORD cluster ; /* начальный кластер */ DWORD fsize ; /* общий размер в байтах */ } DENTRY; /* Г Л О Б А Л Ь Н Ы Е П Е Р Е М Е Н Н Ы Е * / DPB far * DPBPtr ; /* указатель блок параметров */ /* диска (DPB) */ WORD ClUnit ; /* количество секторов в */ /* кластере (а также размер */ /* буфера каталога) */ WORD ByteClust ; /* количество байтов в */ /* кластере */ DWORD TotSect ; /* общее количество секторов */ /* на диске */ WORD FATSize ; /* количество байтов в таб- */ /* лице FAT */ WORD far * FatAnchor ; /* адрес буфера таблицы FAT */ DENTRY near * DirAnchor ; /* адрес буфера каталога */ DENTRY near * AltAnchor ; /* адрес буфера другого ка- */ /* талога */ char defalt_sname [] ={"*.*"}; /* имя поиска по умол- */ /* чанию */ /* ОПРЕДЕЛЕНИЕ ПСЕВДО-СТAHДАРТНЫХ ПОДПРОГРАММ */ #define diskread(d,s,c,b) diskaccess(ABS_READ,d,s,c,b) #define diskwrite(d,s,c,b) diskaccess(ABS_WRITE,d,s,c,b) #define sector_of(cl) (DPBPtr->DataSect+(cl-CL_OFF)*ClUnit) #define cluster_of(sec) (CL_OFF+(sec-DPBPtr->DataSect)/ClUnit) /* ПРЕДВАРИТЕЛЬНЫЕ ОБЪЯВЛЕНИЯ СТAHДАРТНОЙ ПОДПРОГРАММЕ */ WORD get_cluster (); /* получить значение элемента */ /* кластера */ void put_cluster (); /* сохранить значение в клас- */ /* тере */ BOOL savefile (); /* восстановить файл(ы) */ DENTRY near * findt (); /* просмотр буфера каталога */ - 11-61 - DPB far * getdpb () ; /* получить адрес блока пара- */ /* метров диска */ void diskaccess () ; /* абсолютное чтение/запись */ /* диска */ BOOL match () ; /* соответствие определенного */ /* имени с файлом */ /* ******************************************************* /* /* Главная точка входа /* /* ******************************************************* main (argc,argv,envp) int argc ; char * argv [] ; char * envp [] ; } char near * sspec ; /* характеристика поиска */ char dname [DNAME_SIZE]; /* буфер имени каталога */ char * pptr ; /* указатель на каталоговое /* имя */ WORD dnum ; /* номер дисковода (исход- */ /* ное значение 0) */ WORD snum ; /* номер сектора каталога */ WORD savenum ; /* используется для хра- */ /* нения */ /* значения snum */ DENTRY near * dptr ; /* элемент текущего каталога */ print ("\nRESCUE, Version 2.OO\n\n"); if (argc<2) { /* если параметров нет */ print ("*** Имя файла не указано ***\n"); exit (1) ; }; sspec =argv [1]; /* файл для восстановления */ getcwd (dname, DNAME_SIZE) ; /* получить дисковод по */ /* умолчанию и каталог */ if (*(char *)((WORD)dname + strlen(dname) - 1) NE '\\') strcat (dname, "\\"); /* имя пути доступа за- */ /* канчивается знаком "\"*/ pptr = dname+3; /* указатель начального */ /* имени пути доступа*/ dnum = *dname - 'A' ; /* извлечь номер дисковода */ /* Определить разные глобальные значения из блока парамет- */ /* ров диска (DPB), включая размер таблицы FAT, количество */ /* байтов в кластере, общее количество секторов и т.д. */ DPBPtr = getdpb (dnum) ; /* получить блок параметров диска */ if(dnum NE DPBPtr->PhysDrive) { printf ("Дисковод %c: является замененным\n",(dnum+ 'A')); printf("Программа RESCUE будет работать только на физических дисководах\n"); exit (1); } ; - 11-62 - FATSize = DPBPtr->BytesSector * DPBPtr->nFATsec: CLUnit = DPBPtr->SectorsCluster + 1; TotSect = (DWORD) DPBPtr->TotClust * (DWORD) ClUnit + (DWORD) DPBPtr->DataSect; BytCLust= DPBPtr->BytesSector * CLUnit; /* Pаспределить память для буферов каталога и таблиц FAT */ If (((DirAnchor=(Dentry near *) malloc(BytClust)) EQ NULL) OR ((AltAnchor=(DENTRY near *) malloc(BytCLust)) EQ NULL) OR ((FATAnchor=(WORD far *)_fmalloc(FATSize)) EQ NULL)) { printf ("*** Can't Allocate Working Memory ***\n"); exit (1); } ; /* Cчитать в исходную таблицу FAT */ discread (dnum,DPBPtr->Reserve,DPBPtr->nFATsec,FATAnchor); /* Двигаться по цепи элементов каталога в поисках */ /* соответствующего имени пути доступа */ snum = DPBPtr->Dirsect; /* первый сектор каталога */ while (*pptr NE '\0') /* до тех пор, пока путь */ /* доступа к каталогу ненулевой */ if ((dptr = findf (dnum, &snum, pptr, DirAnchor, NULL,FATR_SUBDIR,IS_INIQUE)) NE NULL) { snum = sector_of (dptr->cluster); while ((*pptr NE '\0') AND (*pptr NE '\\')) pptr++; if (*pptr EQ '\\') pptr++; } else { printf ("*** Can't Find Directory %s ***\n", pptr); exit (1); }; /* Ненормальное завершение, если файл, подлежащий */ /* восстановлению, не стерт.

win zip


 
 
CNews: Новости | e-Business | Hi-Tech | Telecom List.ru - каталог ресурсов интернет Directrix џ­¤ҐЄб жЁвЁа®ў ­Ёп
Hosted by uCoz