Call to function, please return me pointer _asm

0

Bry. Nie mam zbytnio doświadczenia z asmem, a potrzebuje pobrac zwrocony wskaznik/wartosc przy wywolaniu pewnej funkcji. Powiedzmy sobie, że mam adres funkcji np. (0xFFFFFFFF), który zwroci mi wskaznik na klasę Test.

 
class Test
{
	public:
	void run1();
	void run2();
	void run3();
};

int main()
{
      Test *tmp;
       _asm
       {
              mov eax 0xFFFFFFFF
              call eax
              //Jak zwrocic i przypisac ten wskaznik nie zdefiniowanemu wskaźnikowi klasy Test?
       }
      //Abym mogl poczyniac to i owo:
      tmp->run1();
      tmp->run2();
      tmp->run3();
      return 0;
}
0

Tu znajdziesz odpowiedź jeżeli chodzi o przypisanie wartości do zmiennej:
http://msdn.microsoft.com/en-us/library/fabdxz08.aspx

Jeżeli wskaźnik jest w eax wtedy:
mov eax, tmp
EDIT:
Poprawka: to co wyżej jest przypisaniem tmp do eax, mówi o tym też strona z linku:

stores the value of var in EAX.

więc poprawnie będzie:
mov tmp, eax

Przepraszam za niedopatrzenie ;)

0

Sory ze tak pozno odpisuje. Ok wszystko sie zgadza, zwraca mi prawidlowy wskaznik. Ale czy mam pewnosc, ze kazda wywolana funkcja zwraca wartosc/wskaznik w rejestrze eax?

0

Z poniższego linka wynika, że nie ma takiej pewności:
http://en.wikipedia.org/wiki/X86_calling_conventions

0

żeby wywołać funkcję, i tak trzeba wiedzieć jaka jest jej konwencja wywołania, więc to nie jest problem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1