2016-01-21 3 views

Répondre

2

Pour ce que vous avez écrit, le compilateur convertit le premier opérande en %fs:%eax car il choisit %eax comme registre ayant la valeur mee. Le mode d'adressage je pense que vous essayez d'utiliser est base: décalage et le décalage doit être une valeur plutôt qu'un registre. C'est la raison de l'erreur "mauvais opérande de mémoire". Cela a fonctionné dans le cas %fs:0x30 car 0x30 est une valeur immédiate.

Pour utiliser le registre %eax comme un décalage, essayez un déréférencement de celui-ci %%fs:(%1) pour obtenir la valeur dans le registre:

 int mee = 48; 
     asm("movl %%fs:(%1), %0" : "=r" (peb) : "r" (mee) :); 

Voir aussi this guide, qui contient quelques exemples d'accès à la mémoire peut-être utiles (et plus) dans l'assemblage en ligne.

+0

J'ai travaillé merci pour l'explication –