[MPlayer-dev-eng] silly code
    Arpi 
    arpi at thot.banki.hu
       
    Wed Jan  2 17:28:45 CET 2002
    
    
  
Hi,
> > i think i need some asm for teh above, to same/restore eax?
> perhaps the attched file might be usefull 
I think it expects caller to pass parameters in stack.
My problem: I cannot modify caller(s). I cannot modify called function.
But I can (in DLL loader) lie to the caller, and give it a fake address,
instead of teh real adderss of the routine it want to call.
So, in short, I can insert a wrapper function between caller and called
func. It works fine for C functions:
int fake_func(int a,int b){
	int ret;
	printf("foobar125 called: a=%d b=%d\n",a,b);
	ret=orig_func(a,b);
	printf("foobar125 returned: %d\n",ret);
	return ret;
}
orig func is a function pointer to the real function. the caller will call
fake_func, instead of orig_func (i lie at dll loader at funcname->address
mapping). It works fine.
But there are a few function which uses registers for parameters, instead of
stack like C does.
And I need ideas how to modify above wrapper to keep the value of
registers, and pass them to the called orig function, and the same for
returned values.
I think something like this:
void fake_func(){
	asm { ... save registers to memory ... }
	printf( ... );  // from memory
	restore regs, call orig func, save regs again
	printf  retrun values
	restore regs, ret
}
problem: it seems to gcc compiles extra code to modify EBP etc before the
asm {} block begins, so it will save already modified valiables.
maybe the whole fake_fucn should be written in pure asm, and it should call
another c function for printf job?
A'rpi / Astral & ESP-team
--
mailto:arpi at thot.banki.hu
http://esp-team.scene.hu
    
    
More information about the MPlayer-dev-eng
mailing list