otóż Bracie,proces B NIE MOŻE użyć do czegokolwiek rejestru,skoro Ty wciąż jesteś w procesie A ;] Windows zapamiętuje stan procesora przed przełączeniem na inne zadanie,stąd wartość EAX dla procesu A będzie taka jak ją zostawisz.
Twój kod nie wykona się z innego powodu-po prostu nie zostanie użyta WARTOŚĆ zmiennej adres,a jej offset ;]Trzeba by to tak zapisać:
asm{
mov ebx,adres//wieeeelokrotnie to przerabiałem w swej karierze
mov dword ptr[ebx],eax
}
a wywołać funkcję trzeba w ten sposób:
asm{
call adres//adres jest adresem twojej procedury
}
pytanie brzmi,jak otrzymać adres owej procedury?Otóż jest to prościutkie,z pomocą przychodzi instrukcja LEA
void test(void)
{MessageBox(hWnd,"Test pomyslny!","Test",MB_OK);}
_asm{
lea eax,test
call eax
}//ten kod wklejam prosto po teście z kompilatora ;]
Pozostaje tutaj problem ręcznego odłożenia parametrów na stos,w zalezności od przyjętej konwencji wywołań.
u Ciebie Bracie,wartość eax zapamiętaj w jakiejś zmiennej DWORD,a następnie z 2 procesu weź przy użyciu ReadProcessMemory weź pobierz jej wartość.
SDK to na stronie microsoftu,wejdź do MSDN i wpisz privledge(or sth) level