EIP setzen ohne ASM moeglich?
-
hallo miteinander.
ich würde gerne wissen ob es moeglich ist in C den EIP zu manipulieren.
oder muss ich dazu zwangslaeufig assembler benutzen?
falls es nicht mit der standardlib geht (was ich irgendwie glaube), gibt es irgendeine extension des GCC die man dafuer benutzen kann?
-
Solche Maschinendetails zu verstecken ist der ganze Sinn und Zweck von C. Nein, das geht nicht.
-
EIP setzen ist ja nichts anderes als ein Jump. Der gcc soll computed goto können. Damit sollte sich das dann eigentlich bewerkstelligen lassen.
-
loki1985 schrieb:
gibt es irgendeine extension des GCC die man dafuer benutzen kann?
Ja, inline assembler.
-
Wäre es nicht möglich, SetThreadContext(...) zu benutzen?
-
Mit GCC kann man
goto
fürvoid*
nutzen, d.h. die Adresse von Labels im Code nehmen und später dorthin springen. Beispiel:goto bar; foo: return; bar: void *ptr; /* ... */ ptr = &&foo; goto *ptr; // Achtung: *(void*)(...) ist hier erlaubt!
Niemand hindert dich daran, einfach einen Zeiger
void *new_eip = (void*)(0xdeadbeef);
zu definieren und dann mitgoto *new_eip;
dort hin zu springen.