unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function InStr(index: integer; str1: string; str2: string): integer;
var
i,len, pos: integer;
begin
pos:=0;
len:=length(str2);
for i:=index to length(str1) do begin
if copy(str1,i,len)=str2 then begin
pos:=i;
break;
end;
end;
result:=pos;
end;
procedure EngineVM(strScript: string);
var
//定义变量
strCommand, strParameters: string;
strParametr: array[0..9] of string;
sSpace: integer;
i: integer;
//переменные команды зашифровать(命令加密)
strText: pointer;
strLen: integer;
strByte: byte;
label
encrypt;
begin
//находим первый пробел в строке
sSpace:=InStr(1,strScript,#32)-1;
if sSpace<>-1 then begin
//все что находится до пробела считаем командой
strCommand:=copy(strScript,1,sSpace);
<-这里出错了(main.pas(66): Incompatible types: 'Array' and 'String')
//остальное - параметры
strParameters:=copy(strScript,sSpace+2,Length(strScript));
//заносим параметры записанные через запятую в массив
i:=0;
while InStr(1,strParameters,',')>0 do begin
//ищем запятую
sSpace:=InStr(1,strParameters,',')-1;
//сохраняем в массив параметр от начала строки до найденной запятой
strParametr:=trim(copy(strParameters,1,sSpace));
//отрезаем от строки strParameters добавленный параметр
strParameters:=copy(strParameters,sSpace+2,Length(strParameters));
//увеличиваем счетчик параметров
i:=i+1;
end;
//добавляем последний параметр отдельно,
//так как после него вместо запятой конец строки
strParametr:=copy(strParameters,1,Length(strParameters));
end else begin
//исли пробелов в строке нет, значит у команды скрипта
//нет параметров, потому за команду принимается все строка
strCommand:=strScript;
end;
//Выполняем скрипт
//сюда ты можешь добавить сколько угодно команд
//команда вывода сообщения (требует 3 параметра)
if strCommand='сообщение' then begin
MessageBox(Form1.Handle,pchar(strParametr[0]),pchar(strParametr[1]),StrToInt(strParametr[2]));
//команда шифровки строки и вывода шифрованной строки на экран
end else if strCommand='зашифровать' then begin
strText:=pointer(strParametr[0]);
strByte:=StrToInt(strParametr[1]);
strLen:=Length(strParametr[0]);
asm
mov ecx, strLen
mov eax, strText
dec eax
mov bh, strByte
@encrypt:
xor byte ptr[eax+ecx],bh
loop @encrypt
end;
ShowMessage(strParametr[0]);
end else begin
ShowMessage('Invalid command');
end;
end;
end.
出错的地方应该怎样修改呢?请帮帮忙
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课