Скачиваний:
38
Добавлен:
01.05.2014
Размер:
2.02 Кб
Скачать
/**
*.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