anthony@alberta.UUCP (Anthony Mutiso) (11/08/88)
Hi, there Netfolks: Any one have any ideas how one can do the following in C:- (1) find the bottom and the top of a processes stack. (2) read the information on stack. (3) copy the stack to disk ala core dump, as a way of saving the process context. (4) write to the stack (i.e grow the stack and place return addresses and automatic variables (initialized), etc, on it. I would like to prime a processes stack, so a process can begin from somewhere in the middle of its address space (in some special function, rather than the in the main) and unwind the stack in the usual way when the special function returns) --------------------- Anthony Mutiso anthony@alberta.UUCP
crossgl@ingr.UUCP (Gordon Cross) (11/09/88)
In article <163@snipe-lake.UUCP>, anthony@alberta.UUCP (Anthony Mutiso) writes: > > Any one have any ideas how one can do the following in C:- > > (1) find the bottom and the top of a processes stack. > (2) read the information on stack. > (3) copy the stack to disk ala core dump, as a way of saving the > process context. > (4) write to the stack (i.e grow the stack and place return addresses > and automatic variables (initialized), etc, on it. All of these things can be done but you will have to code assembly routines in all likelyhood. The top of the stack (assuming your machine uses a stack) is kept in a special register called the stack pointer. The "bottom" you may have some trouble with. > I would like to prime a processes stack, so a process can begin from > somewhere in the middle of its address space (in some special function, > rather than the in the main) and unwind the stack in the usual way when > the special function returns) I'm not quite sure what it is you are wanting to do here. A process does not actually begin in main but in a special entry point routine usually called "start". This routine is responsible for certain initializations required for your process to run correctly. It is possible to specify an alternate entry point using the -e option of ld(1) but then this initialization must be done by you! I can't think of any reason for wanting to do this but you never know. Good luck! Gordon Cross Intergraph Corp. Huntsville, AL