Volani funkci v C pres tabulku vektoru

Jindroush kubecj na asw.cz
Středa Březen 28 01:10:48 CEST 2012


On 28.3.2012 0:59, Petr Labaj wrote:
> Potreboval bych pres tabulku vektoru volat v C knihovni funkce, ktere
> budou ulozene nekde ve Flash.
>
> Vyrobit tu tabulku vektoru na definovane adrese snad nebude moc
> velky problem, v linker scriptu tomu vyrobim sekci na pevne adrese
> a udelam tu tabulku treba v ASM:
>
> .section ".vectors"
> .long func1
> .long func2
>
> Ale jak pak ty funkce volat z jineho programu v C, kdyz jedine co vim je,
> ze funkce maji prototypy napr.
>
> void func1 (int par1);
> int func2 (int par1, char *par2);
>
> a ze tabulka vektoru zacina na absolutni adrese treba 0x100000, tedy
> ze adresa funkce func1 je ulozena na 0x100000 a adresa funkce func2
> je na 0x100004.

A jsou tam nejaka špecifiká, ktere vas nuti mit to na pevnych adresach a 
jeste jako dvoji indirekci?

Ale jiste to muze jit nejak jako:
typedef void (*func1Type)( int );
long* pfnArray = 0x100000;
func1Type f1ptr = (func1Type) pfnArray[0];

f1ptr( 1 );

Urcite jsem tam zapomel nejaky hvezdicky nebo tak, pisu z hlavy ;o)


Dalsi reseni by mohly byt wrappery/stuby obsahujici pouze indirect jump.
tj.
void func1(int par1)
{
	__asm( jmp [0x100000] ); //urcite spatna syntaxe
}

-- 
Jindroush (kubecj na avast.com)
http://www.kostky.org - Pro fany stavebnic LEGO.


Další informace o konferenci Hw-list