unknown character '0x40'

Hallo,

tja, diese Fehlermeldung bekomme ich, wenn ich folgendes kompilieren möchte:

Code:
#include <windows.h>
main()

{


	char buf[4];

	buf[0]='c';
	buf[1]='m';
	buf[2]='d';
	buf[3]='\0';


	WinExec(buf,SW_SHOW);


	exit(1);


		__asm {		
push        ebp
mov         ebp,esp

//sub         esp,44h
push        ebx
push        esi
push        edi

//lea         edi,[ebp-44h]
//mov         ecx,11h
//mov         eax,0CCCCCCCCh
//rep stos    dword ptr [edi]



mov         byte ptr [ebp-4],63h
mov         byte ptr [ebp-3],6Dh
mov         byte ptr [ebp-2],64h
mov         byte ptr [ebp-1],0


//mov         esi,esp
push        5
lea         eax,[ebp-4]
push        eax
call        dword ptr [__imp__WinExec@8 (0042413c)] // Zeile 47
//cmp         esi,esp
//call        __chkesp (00401250)


exit(1);
push        1
call        exit (004010c0)

	}


Die genaue Fehlermeldung von Visual C++ / Windows XP SP2:

Code:
Compiling...
testset.cpp
C:\testset.cpp(47) : error C2018: unknown character '0x40'
C:\testset.cpp(47) : error C2400: inline assembler syntax error in 'first operand'; found 'constant'
C:\testset.cpp(47) : error C2041: illegal digit 'c' for base '8'
C:\testset.cpp(52) : error C2400: inline assembler syntax error in 'opcode'; found '('
C:\testset.cpp(54) : error C2400: inline assembler syntax error in 'second operand'; found '('
C:\testset.cpp(54) : error C2041: illegal digit 'c' for base '8'
C:\testset.cpp(56) : error C2400: inline assembler syntax error in 'opcode'; found '('
C:\testset.cpp(57) : fatal error C1004: unexpected end of file found
Error executing cl.exe.

testset.obj - 8 error(s), 0 warning(s)

Ich kann mit der Fehlermeldung nicht wirklich was anfangen, da ich auch kaum etwas über __asm weiss. Kann mir da jemand weiterhelfen?


MfG,

current
 
so wie ich das sehe ist das Assembly aus dem WinDasm debugger oder ähnlichem, so wie es da steht, kann es nicht funktionieren - die adressen in den Calls beziehen sich auf die Exe wo sie herausgerissen wurden. Aß0erdem zeigt der Disassembler die "absolute" Adresse (also die auf die Imagebasis draufaddierte). Kurz und knapp gesagt: Du kannst stattdessen etwas in der Art schreiben:
Code:
lea eax,WinExec
call eax
Versuchst Du gerade ein Shellcode zu schreiben? Dann sei Dir gesagt dass es nciht ganz so einfach ist wie es manchmal aussieht :rolleyes:

PS: und um "vernünftigen" Asmcode zu sehen, nimm bitte einen anderen Compiler als VC++ 6 AutorenEdition - der Code tut ja fast schon weh ;)
 
Zurück
Oben