JMP à l'adresse absolue (op codes)

Je suis en train de coder un exe packer/protecteur comme un moyen d'en apprendre plus sur l'assembleur, c++, et comment PE fichiers de travail. J'ai actuellement ai eu de travail de sorte que la section contenant l'EP est XORed avec une clé et une nouvelle section est créée qui contient le code de décryptage. Tout fonctionne très bien sauf quand j'essaie de le JMP à l'origine du PE après le déchiffrement.

Fondamentalement, je fais ceci:

DWORD originalEntryPoint = optionalHeader->AddressOfEntryPoint;
//-- snip -- //
    crypted.put(0xE9);
 crypted.write((char*)&orginalEntryPoint, sizeof(DWORD)); 

Mais au lieu de lui sauter au point d'entrée, ollydbg montre que ce code démonte:

00404030   .-E9 00100000    JMP 00405035 ; should be 00401000 =[

et quand j'essaie de la modifier manuellement dans olly le nouveau opcode montre que

00404030    -E9 CBCFFFFF    JMP crypted.00401000

Où avez-0xCBCFFFFF venir? Comment puis-je générer que du C++?

À ceux qui pourraient tomber sur ce, il y a une question similaire, au cours de RÉ.SE où j'ai fourni une explication détaillée: reverseengineering.stackexchange.com/questions/19459/...

OriginalL'auteur Christopher Tarquini | 2009-10-09