我将我的项目切换到x64,但出现错误

  • 本文关键字:错误 x64 项目 c++ 64-bit
  • 更新时间 :
  • 英文 :


我有一个项目,我现在正在做一段时间,在我从发布x86版本切换到x64版本之前,它运行得很好。

这是出现错误的代码行:

ReadProcessMemory(a.hProcess, LPCVOID(b->Ebx + 8), LPVOID(&c), 4, 0);

我不了解程序集,但当错误出现在b->Ebx时,我将其更改为b->Rbx。它编译并运行,但没有完成它应该做的工作。

我用错寄存器了吗?

经过一点调试

pe_dos_h = PIMAGE_DOS_HEADER(pe_image);
pe_nt_h = PIMAGE_NT_HEADERS(DWORD(pe_image) + pe_dos_h->e_lfanew);
//error when trying to assign a value or access the signature in nt-headers
//ERROR: read access violation
IMAGE_NT_HEADERS* pe_nt_h->Signature == IMAGE_NT_SIGNATURE;//0x00004550-PE00

pe_image是从pe(.exe(文件复制的原始数据。处理x86 PE映像与x64映像的区别是什么?

这是代码的简化版本。如果您认为问题超出了这段代码的范围,请告诉我。

问题在于我定义IMAGE_SECTION_HEADER的方式,在x64体系结构中,我必须使用x64特定的数据类型IMAGE_SECTION_HEADER64

以及在铸造pe_nt_h = PIMAGE_NT_HEADERS(DWORD_PTR(pe_image) + pe_dos_h->e_lfanew);

我不得不使用DWORD_PTR而不仅仅是DWORD,因为它缺少一些位。

这是我在帖子中提供的简化版本的解决方案代码:

PIMAGE_DOS_HEADER pe_dos_h = PIMAGE_DOS_HEADER(pe_image);
PIMAGE_NT_HEADERS64 pe_nt_h = PIMAGE_NT_HEADERS(DWORD_PTR(pe_image) + pe_dos_h->e_lfanew);

相关内容

最新更新