小编use*_*502的帖子

如何从汇编程序访问Windows x64的C数组?

我编写了一个汇编程序函数来加速图像处理的一些事情(使用CreateDIBSection创建图像).

对于Win32,汇编程序代码可以正常工作,但对于Win64,一旦我尝试访问我的数组数据,我就会崩溃.

我将相关信息放在结构中,我的汇编程序函数获取指向此结构的指针.结构指针放在ebx/rbx中,通过索引我从结构中读取数据.

知道我做错了什么吗?我将nasm与Visual Studio 2008一起使用,对于Win64,我设置了"default rel".

C++代码:

struct myData {
  tUInt32 ulParam1;
  void* pData;
};

CallMyAssemblerFunction(&myData);
Run Code Online (Sandbox Code Playgroud)

汇编代码:

Win32的:

...
  push ebp;
  mov ebp,esp
  mov ebx, [ebp + 8]; pointer to our struct
  mov eax, [ebx]; ulParam1
  mov esi, [ebx + 4]; pData, 4 byte pointer

  movd xmm0, [esi];
...
Run Code Online (Sandbox Code Playgroud)

Win64平台:

...
  mov rbx, rcx; pointer to our struct
  mov eax, [rbx]; ulParam1
  mov rsi, [rbx + 4]; pData, 8 byte pointer

  movd xmm0, [rsi]; CRASH!
...
Run Code Online (Sandbox Code Playgroud)

c++ windows x86 assembly x86-64

3
推荐指数
1
解决办法
736
查看次数

标签 统计

assembly ×1

c++ ×1

windows ×1

x86 ×1

x86-64 ×1