wine-wine/loader/dump.c

76 lines
2.2 KiB
C
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

#ifndef WINELIB
/*
static char RCSId[] = "$Id: dump.c,v 1.2 1993/07/04 04:04:21 root Exp root $";
static char Copyright[] = "Copyright Robert J. Amstadt, 1993";
*/
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#ifdef linux
#include <linux/unistd.h>
#include <linux/head.h>
#include <linux/ldt.h>
#endif
#include <errno.h>
#include "neexe.h"
#include "prototypes.h"
/**********************************************************************
* PrintFileHeader
*/
void
PrintFileHeader(struct ne_header_s *ne_header)
{
printf("ne_header: %c%c\n",
ne_header->ne_magic & 0xff,
ne_header->ne_magic >> 8 );
printf("linker version: %d.%d\n", ne_header->linker_version,
ne_header->linker_revision);
printf("format flags: %04x\n", ne_header->format_flags);
printf("automatic data segment: %04x\n", ne_header->auto_data_seg);
printf("CS:IP %04x:%04x\n", ne_header->cs, ne_header->ip);
printf("SS:SP %04x:%04x\n", ne_header->ss, ne_header->sp);
printf("additional flags: %02x\n", ne_header->additional_flags);
printf("operating system: %02x\n", ne_header->operating_system);
printf("fast load offset: %04x\n", ne_header->fastload_offset);
printf("fast load length: %04x\n", ne_header->fastload_length);
}
/**********************************************************************
* PrintRelocationTable
*/
void
PrintRelocationTable(char *exe_ptr,
struct ne_segment_table_entry_s *seg_entry_p,
int segment)
{
struct relocation_entry_s *rep;
int i;
int offset;
u_short n_entries, *sp;
printf("RELOCATION TABLE %d:\n", segment + 1);
if (seg_entry_p->seg_data_offset == 0)
return;
offset = seg_entry_p->seg_data_length;
if (offset == 0)
offset = 0x10000;
sp = (u_short *) (exe_ptr + seg_entry_p->seg_data_offset * 512 + offset);
n_entries = *sp;
rep = (struct relocation_entry_s *) (sp + 1);
for (i = 0; i < n_entries; i++, rep++)
{
printf(" ADDR TYPE %d, TYPE %d, OFFSET %04x,",
rep->address_type, rep->relocation_type, rep->offset);
printf("TARGET %04x %04x\n", rep->target1, rep->target2);
}
}
#endif /* ifndef WINELIB */