0

例如,masm 过程有 2 个参数,其中包含类似于指向原始字节数组地址的指针和数组长度的东西。它将所有值更改为 0 并返回数组的最后一个值(不是数组)。

在 C# 中有一些类从 .dll 文件加载 masm 代码并以某种方式传递给该方法,类似于 ref byte[] 和数组长度。

我在互联网上找到的东西让我想到了这样的事情:

...
[DllImport("MY PATH TO DLL FILE :)")]
private static extern unsafe long MyProc1(byte* ARRAY, long ARRAYLength);

    public override unsafe void CSDOSOMETHING(ref byte[] MYARRAY)
    {
        fixed (byte* POINTERARRAY = &MYARRAY[0]) //So it won't be deleted
        {
            long RETURNFROMMASM = MyProc1(POINTERARRAY, MYARRAY.Length);
            for (int i = 0; i < MYARRAY.Length; i++)
                MYARRAY[i] = POINTERARRAY[i];
        }
    }
...

MASM 就像:

.CODE
MyProc1 proc ;'arguments? here'
  mov arrayInput, rcx ;rcx argument 1
  mov arrayLength, rdx ;rdx argument 2
  ;LOOP THAT CHANGE VALUE TO 0
  mov rax, rcx[rdx-1] ;error. here put last element of array for return
  ret
MyProc endp
END

我只是找不到带有 ref 的 C# 数组对象如何将其更改为指针,因此它可以作为内存地址工作,因此可以将其作为参数传递给 masm,然后在 masm 中修改地址指向的值。

简单:将 C# 数组作为原始数组和数组长度发送到 dll masm64 过程以修改并返回一些值

4

0 回答 0