我正在尝试编写一个 exe 打包程序/保护程序,以此来了解更多关于汇编程序、c++ 以及 PE 文件如何工作的信息。我目前已经让它工作了,所以包含 EP 的部分与一个密钥进行异或,并创建了一个包含我的解密代码的新部分。一切都很好,除非我在解密后尝试 JMP 到原始 EP。
基本上我这样做:
DWORD originalEntryPoint = optionalHeader->AddressOfEntryPoint;
// -- snip -- //
crypted.put(0xE9);
crypted.write((char*)&orginalEntryPoint, sizeof(DWORD));
但 ollydbg 并没有跳转到入口点,而是显示这段代码反汇编为:
00404030 .-E9 00100000 JMP 00405035 ; should be 00401000 =[
当我尝试在 olly 中手动更改它时,新的操作码显示为
00404030 -E9 CBCFFFFF JMP crypted.00401000
0xCBCFFFFF 是从哪里来的?我将如何从 C++ 端生成它?