WinNT Syscall



  • Ich glaube zwar nicht, dass wer die antwort kennt aber den Versuch ist es trotzdem wert:

    Was ich machen muss um einen Syscall unter Windows aufzurufen. Bei

    mov eax, 1
    int 80h
    

    versucht er auf Speicher in 0xFFFFFF zuzugreifen.



  • Dr. Fred schrieb:

    mov eax, 1
    int 80h
    

    der code kommt von freebsd oder diesem bastelsystem linux ne? unter win werden die meisten syscalls mit 'int 2eh' aufgerufen. ich glaube nicht, dass du das 1:1 übernehmen kannst wenn du 80 gegen 2e austauschst



  • opps hab hab 80 statt 2e geschrieben, richtig. Aber eax ist auch unter Windows die Syscall id, da bin ich mir ziemlich sicher, aber jetzt muss man noch irgendwie die Parameter übergeben, aber wie ?

    Unter Linux sind das einfach die Register.



  • Habs hinbekommen:

    #include <stdio.h>
    
    int main( void )
    {
    	printf("Calling Syscall...\n");
    
    	void* test = NULL;
    
    	//hate hate hate
    	asm
    	(
    		"pushl %0				\n"
    		"lea 4(%%esp), %%edx	\n"
    		"mov $0x1, %%eax		\n"
    		"int $0x2e				"
    
    	::"r"(test) );
    
    	printf("... return from Syscall\n");
        getchar();
    
    	return 1; 
    }
    

Anmelden zum Antworten