C-Funktion von Inline-Assembly callen
-
Mit dem Microsoft Compiler geht das ganz easy mit den Funktionsaufrufen:
#include <stdio.h> void aha( ) { puts("AHA"); } int main() { __asm { call aha; } return 0; }
Mein Kommentar wird erst dann sinnlos, wenn du mich vom Gegenteil überzeugst.
-
#include <stdio.h> char format[] = "%s %s\n"; char what[] = "I am so bored"; char when[] = "today"; void main( void ) { __asm { mov eax, offset when push eax mov eax, offset what push eax mov eax, offset format push eax call printf pop ebx pop ebx pop ebx } }
-
#include <stdio.h> char format[] = "%s %s\n"; char what[] = "I am so bored"; char when[] = "today"; int main() { __asm { push offset when push offset what push offset format call printf add esp, 12 } }
-
TheAsmN00b schrieb:
rüdiger: Was ist daran falsch, es scheint nur die Zeile mit " << HIER " falsch zu sein, das andere ist at&t assembly.
__asm("call WriteMe"); // << Hier
das müsste glaube ich so aussehen. Bin mir aber nicht sicher
__asm__ __volatile__ ("call %1" : : "1"(WriteMe) :);
siehe hier http://www.c-plusplus.net/forum/viewtopic-var-t-is-41479.html
@others
was ihr postet ist sinnlos, da er nicht den MSVC nutzt...
-
Dieser Thread wurde von Moderator/in Tim aus dem Forum ANSI C in das Forum Assembler verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hmmm.... das klappt auch nicht, leider. Kann mir wer sonst helfen?
gruss TheAsmN00b
-
vielleicht muss die Adresse relativ sein für call. Aber wie gesagt, schau einfach mal in die zahlreichen Links, die in der FAQ stehen (siehe die beiden Links von mir...)
-
Ich habe jetzt alles durchgeschaut und fand nichts. Hat jemand eine Idee?
danke
-
Probier's mal so:
void foo() { printf("bar\n"); } //... __asm__ __volatile__("call *%0\n"::"r"(foo));
-
Danke Overflow, voll geil, das hat geklappt.
Ich möchte gerne den ganzen Source posten (wer weiss, vllt kann man das ins Faq für andere Personen verschieben):
/* IDE: Dev-C++ 4.9.9.2 Compiler: MinGW (version unkown) [gcc for win32] */ #include <stdio.h> #include <stdlib.h> #include <windows.h> int change(void *address, int wb) { HANDLE h=OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_WRITE,1, GetCurrentProcessId()); return WriteProcessMemory(h, address, &wb, 1, NULL); } int main(int argc, char* argv[]) { asm("pushl $0x74"); asm("pushl $Here"); __asm__ __volatile__("call *%0\n"::"r"(change)); asm("addl $8, %esp"); asm("Here: jmp Here"); printf("The JMP was now changed to JZ ;-)\n"); system("pause"); return 0; }
Danke für die Hilfe.
Viel Spass, AsmNoob