2013-09-22 4 views
0

J'essaie d'insérer une instruction JMP en utilisant l'assembleur en ligne mais je reçois une erreur disant:C++ erreur assembleur en ligne

« expression expected »

// Allocate a place in memory for the bytes 
BYTE *jmp = (BYTE*)malloc(len + 5); 

// Copy the bytes of original + length to the allocated memory place: 
memcpy(jmp, orig, len); 

// Next we want to insert a jump back to the original + length 
jmp += len; // increment to the end of the copied bytes 
jmp[0] = _asm JMP // this is where i get the error 

*(DWORD*)(jmp + 1) = (DWORD)(orig + len - jmp) - 5; 

Je suis nouveau à l'Assemblée et je voudrais connaître un moyen d'atteindre cet objectif d'une autre manière.

Répondre

1
jmp[0] = _asm JMP 

Ne peut jamais travailler comme opcode (octet (s) représentant l'instruction) pour JMP dépend de la opérande (argument à l'instruction). Voir Vol. 2A 3-433 dans le manuel du développeur de logiciels Intel® 64 et IA-32 Architectures.

Il semble que vous soyez après JMP rel32 auquel cas vous devez remplacer 0xE9 par _asm JMP.

Pour plus d'informations, je recommande les documents Intel liés ou l'une des nombreuses autres sources sur le codage d'instructions x86 sur le net. Par exemple. this one from osdev wiki.

Questions connexes