Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Операционная система MS-DOS / 1-2 Том / 276 / DBSP1A / LIBSRC / GET_EXEH
.C/**
*.Name get_exeh
*
*.Title Џа®зЁв вм § Ј®«®ў®Є EXE-д ©«
*
*.Descr ”гЄжЁп зЁв Ґв § Ј®«®ў®Є EXE-д ©« ў
* бвагЄвгаг вЁЇ EXE_HDR, § Є §лў Ґв Ї ¬пвм
* ¤«п в Ў«Ёжл а §¬ҐйҐЁ© ᥣ¬Ґв®ў Ё бзЁвлў Ґв
* в Ў«Ёжг ў нвг ®Ў« бвм. Ђ¤аҐб § Є § ®© ®Ў« бвЁ
* Ї®¬Ґй Ґвбп Ї® ¤аҐбг, ЇҐаҐ¤ ў Ґ¬®¬г ў rtb.
* …б«Ё в Ў«Ёж а §¬ҐйҐЁ© ®вбгвбвўгҐв, Ї ¬пвм ¤«п
* ҐҐ Ґ § Є §лў Ґвбп.
*
*.Proto int get_exeh(EXE_HDR *exeh,RELOC_TAB **rtb,FILE *exe_file)
*
*.Params exeh - гЄ § ⥫м бвагЄвгаг, Є®в®а п
* ¤®«¦ Ўлвм § Ї®«Ґ Ёд®а¬ жЁҐ©
* Ё§ § Ј®«®ўЄ EXE-д ©«
*
* rtb - гЄ § ⥫м гЄ § ⥫м в Ў«Ёжг
* а §¬ҐйҐЁ© ᥣ¬Ґв®ў Їа®Ја ¬¬л
*
* exe_file - гЄ § вҐ«м ®вЄалвл© EXE-д ©«
* (¤® ўл§®ў дгЄжЁЁ Ґ«м§п ®Ўа й вмбп
* Є н⮬г д ©«г, в.Є. бзЁв Ґвбп, зв®
* гЄ § ⥫м ⥪г饣® ᬥ饨п гбв ®ў«Ґ
* з «® д ©« )
*
*.Return 0 ЇаЁ гᯥ讬 бзЁвлў ЁЁ § Ј®«®ўЄ ;
* -1 ў б«гз Ґ ҐЇа ўЁ«м®Ј® д®а¬ в § Ј®«®ўЄ
*
*.Sample show_exe.c
**/
#include <stdlib.h>
#include <stdio.h>
#include "sysp.h"
int get_exeh(EXE_HDR *exeh,RELOC_TAB **rtb,FILE *exe_file) {
int i,j,k;
// бзЁвлў Ґ¬ д®а¬ вЁа®ў го з бвм § Ј®«®ўЄ
for(i=0; i < sizeof(EXE_HDR); i++) {
*(((char*)exeh) + i) = fgetc(exe_file);
if(feof(exe_file)) break;
}
if(exeh->signature != 0x5a4d) return(-1); // нв® EXE-д ©«?
if((i=exeh->rel_item) != 0) {
// Ґб«Ё Ґбвм в Ў«Ёж ЇҐаҐ¬ҐйҐЁ©, § Є §лў Ґ¬ ¤«п ҐҐ Ї ¬пвм
*rtb = (RELOC_TAB *)malloc(i*sizeof(RELOC_TAB)+16);
// бзЁвлў Ґ¬ в Ў«Ёжг ЇҐаҐ¬ҐйҐЁ©
for(k=0; k<i; k++) {
for(j=0;j < sizeof(RELOC_TAB);j++) {
*((char*)(*rtb)+j+k*sizeof(RELOC_TAB))=fgetc(exe_file);
if(feof(exe_file)) break;
}
}
}
else *rtb = (RELOC_TAB *)0;
return(0);
}
Соседние файлы в папке LIBSRC