var
I,Max:Integer;
ExBp:Integer;
asm
mov eax,[Params];
call System.@DynArrayHigh;
test eax,eax;
jl @L2;
inc eax;
mov [Max],eax;
mov [I],$00000000;
@L1:
mov eax,[Params];
mov edx,[I];
mov eax,[eax+edx*4];
push [eax];
inc dword ptr [I];
dec dword ptr[Max];
jnz @L1;
@L2:
push CallSelf;
push [RetParam];
call [CallAddr];
@L3:
end;
CallAddr:Pointer;
Params:array of Pointer;
RetParam:Integer;
不过貌似Params长度超过1,运行后就权限错,结果可以输出上面那段汇编好像就取出数组最后的一个元素,也就是字符串指针
procedure xxxxx ;
var
I, Max, ExBp, tmp: Integer ;
tmpary: array of Pointer ;
begin
tmpary := nil ;
if Length(Params) > 0 then
begin
SetLength(tmpary, Length(Params)) ;
for i := 0 to High(params) do
Move(params[i], tmpary[i], 4);
end;
asm
pushad
push tmpAry
push CallSelf
push RetParam
call calladdr
popad
end;
end;
tmpary这部份出错,算了,结帖