cs00chs@unccvax.uncc.edu (charles spell) (10/22/90)
I have previously posted a question on finding the offset of the data segment
of an executable...
Most people were thinking that I wanted to find this out after the executable
has been loaded...what I want to do is find the DS file offset in
the executable file itself BEFORE it's loaded...
Specifically, let's say I had a global variable 'int count;' compiled
in TEST.EXE. If I knew where the start of my initialized data was I could
write the following program that simply increments whatever 'count' is
initialized to (in TEST.EXE)...
/*
* incrcnt.c -> incrcnt.exe - a program mto increment 'count' in file
* TEST.EXE
*/
main()
{
FILE *fp;
long fp_offset; /* file offset to initialized data segment */
int hold;
fp = fopen("TEST.EXE", "r+b"); /* in use i would test for (FILE *) NULL */
fp_offset = find_dseg(fp); /* find_dseg() - HOW DO I DO THIS??? */
fp_offset +=find_var(fp, "count"); /* find variable "count" in TEST.EXE */
fseek(fp, fp_offset, 0); /* should always fseek before fread() */
fread(&hold, sizeof(hold), 1, fp);
hold++; /* increment variable... */
fseek(fp, fp_offset, 0); /* should always fseek before fwrite()!! */
fwrite(&hold, sizeof(hold), 1, fp);
fclose(fp);
}
find_var() would be similar to UNIX nlist(3).
--
.--------------------------. ... |On the border of your mind lies a place
|uunet!mcnc!unccvax!cs00chs| (") |where dreams and reality are one...I will
`--------------------------'-w-U-w-|take you there, for I am the subject...
\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\|the subject of your imagination. -Aldo Nova