How to access C arrays from assembler for Windows x64?
        Posted  
        
            by 0xdword32
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by 0xdword32
        
        
        
        Published on 2010-03-18T12:46:15Z
        Indexed on 
            2010/03/18
            12:51 UTC
        
        
        Read the original article
        Hit count: 393
        
I've written an assembler function to speed up a few things for image processing (images are created with CreateDIBSection).
For Win32 the assembler code works without problems, but for Win64 I get a crash as soon as I try to access my array data.
I put the relevant info in a struct and my assembler function gets a pointer to this struct. The struct pointer is put into ebx/rbx and with indexing I read the data from the struct.
Any idea what I am doing wrong? I use nasm together with Visual Studio 2008 and for Win64 I set "default rel".
C++ code:
struct myData {
  tUInt32 ulParam1;
  void* pData;
};
CallMyAssemblerFunction(&myData);
Assembler Code:
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];
...
Win64:
...
  mov rbx, rcx; pointer to our struct
  mov eax, [rbx]; ulParam1
  mov rsi, [rbx + 4]; pData, 8 byte pointer
  movd xmm0, [rsi]; CRASH!
...
© Stack Overflow or respective owner