Variable Parameteranzahl
-
Moin,
hab da ein problem...
ich möchte eine C-Funktion aufrufen, aber mal mit 2 long parametern - mal mit 3 long parametern - und mal mit X long parametern.also möchte ich die Anzahl der Parameter aus einer C-Variable in den ASM-Code übergeben. und auch die Adresse der Funktion soll übergeben werden.
ich denke, dass ich in asm eine schleife brauche um das zu realisieren!?
so stell ich mir das vor:
c++{ long pAnz = 3; // Anzahl der Parameter void* funcPtr = 0x12345678; // Adresse der Funktion void* params = 0x5234234; // Irgend ein Zeiger auf speicher asm{ mov %pAnz, %cnt; // anzahl der parameter merken loop: // sprung marke pushl %params; // den ersten parameter auf den stack addl $4, %params; // zeiger erhoehen decl %cnt; // counter dekrementieren jnz loop; // springen wenn nicht null call %funcPtr; // funktion aufrufen } }
ist natürlich nur ausgedachter code... weil ich kein plan hab wie ich das in ASM realisiere.
ist das prinzipiell möglich?
-
könnte so aussehen - muss halt noch vom Intel- Syntax in den frickligen AT&T- Syntax übersetzen:
unsigned long vararg__cdecl(unsigned long nArgs,void* pArgs,void* pFunc) { unsigned long result; __asm{ mov ecx,nArgs mov edx,pArgs mov eax,pFunc test ecx,ecx jmp l2 l1: push DWORD ptr [edx+ecx*4-4] sub ecx,1 l2: jnz l1 call eax mov ecx,nArgs lea ecx,[ecx*4] add esp,ecx mov result,eax } return result; } int main() { DWORD args[4] = {(DWORD)"hello: %d % d % d\n",3,4,5}; printf("bla bla\n"); vararg__cdecl(4,&args[0],&printf); system("pause"); return 0; }
-
wow - vielen dank. dann versuch ich mich am frickligen at&t