2010-02-15 3 views
3

Je suis vraiment novice en programmation (en général, c'est pathétique) et certains assemblages liés à Python ont surgi dans cette application que je suis en train de pirater pour l'utiliser en 64 bits.Utilisation de la fonction JMP d'assemblage sur x86_64

Essentiellement, le code va comme ceci:

#define FUNCTION(name)  \ 
    .globl _##name;    \ 
    _##name:     \ 
    jmp *(_p_##name) 

.text 
    FUNCTION(name) 

La syntaxe FONCTION (nom) est utilisé environ 50 fois pour définir les en-têtes pour une bibliothèque Python externe pour autant que je peux dire (je ne vais pas pour prétendre que je le comprends parfaitement, je fais juste un bugfixing).

Depuis que je suis la compilation pour x86_64, l'erreur suivante crachée par GCC pour chaque fonction (nom) par exemple:

32-bit d'adressage absolu ne sont pas pris en charge pour x86-64

ne peut pas faire relocalisation 4 octets signé

Comment est-ce que je devrais "réparer" cela pour fonctionner sur x86_64?

Répondre

2

Récupérez une copie du Intel Architecture Software Developer's Manuals. Comme vous le voyez, certaines formes de l'instruction jmp ne sont pas valides en mode 64 bits. En particulier, les deux formes "Saut loin, absolu, adresse donnée en opérande" ne fonctionneront pas. Vous devrez passer à un adressage relatif ou à un adressage indirect absolu de l'instruction. Volume 2A, page 3-549 dans ma copie, du manuel a une énorme pile d'informations sur jmp.

Questions connexes