例如,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 过程以修改并返回一些值