• Объявления

    • Garik66

      Пользователям форума   05.11.2017

      Прошу обратить внимание на эту тему (чтобы увидеть ссылку, войдите в объявление - нажмите на заголовок):   
MasterGH

Создание языкового файла RU

200 сообщений в этой теме

Смысл Ultimap логировать количество исполнений кода по адресам у таких команд как: call, ret и у прыжков.


"Filter future branches" пока активна, то происходит автоматически сбор новых адресов с проходами по call, ret, прыгах. Если галку снять, то не будут появляться новые адреса в таблице и будет работа с имеющимися адресами и со связными с ними счетчиками проходов.


"Mark all new branches as filtered out". Когда отмечена эта галка, то любые вызовы кода, которые сработают попадают в игнорируемый список. Если игра сделала проход по адресу, то он и счетчик связанный с ним уже находящийся в таблице пропадет из таблицы. Если проход был и данных о нем нет в таблице, то и не появится более никогда там пока не нажали на Reset.

Если поиск не успешный, то использовать Reset. Это сбросит все.

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

NullAlex, MasterGH, спасибо за сообщения.

 

MasterGH

И из всего этого следует, что "branch" переводиться как... :D

 

 

По Ultimap нашёл только 2 ролика на ютубе

www.youtube.com/watch?v=T5sXoEEPFBQ

www.youtube.com/watch?v=Es-ziVPhrNs

Чего-то древовидного там нет, чтобы можно было перевести, как "ветви", связи тоже как-то сомнительно.

Честно, я прям в ступоре.

В данном случае, слово "branch" - это существительное.

Если обратиться к лингво, то

 

1) ветвь, ветка (растений)
2) ответвление (дороги, реки)
3) отрасль, подразделение
4) = branch office, = branch establishment отделение, филиал
5) воен. род войск
6) род, семья, ветвь
7) следствие, последствия, выводы
8) рукав (реки); ручеёк
9) отрог (горной цепи), боковой хребет
10) деталь многосвечного канделябра
11) тех. кривошип; шатун
12) тех. тройник (и другие "размножители"); ветвь на схеме разводки

 

Promt даёт ещё 5 значений:

1) раздел
2) отрасль
3) род (family)
4) власть
5) переход (Компьютеры)

 

Выходит, в данном случае, тут 2 варианта перевода, либо "переходы", либо "выводы" и ни в одном из них я не уверен.

 

Всего лишь 1 слово, а столько волокиты...

 

P.S. prntscr.com что-то тупит, прикреплю картинку к посту.

 

Snap4.jpg

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
16 час назад, SER[G]ANT сказал:

И из всего этого следует, что "branch" переводиться как... :D

Наверное в данном случае лучше переводить не "до словно", а сделать "смысловой" перевод.

Я даже советовался с дочкой (преподаёт английский, 3 года прожила в Америке).

Из объяснений  MasterGH, получается, что-то типа:

"Filter future branches" подключить/отключить добавление новых прыжков/переходов ( call, ret и т.д.).

 

Сам Ultimap я пока не трогал - жду уроков от мастеров по этому инструменту.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Проблема в том, что и смысловой перевод туда нельзя запихнуть, даже если сокращать по жёсткому. Число букв ограничено.

Если отталкиваться от сообщения MasterGH, "Когда отмечена эта галка, то любые вызовы кода, которые сработают попадают в игнорируемый список", то можно перевести, как "вызовы". Хоть это и не верный перевод, но думаю, что это лучшее, что есть на данный момент.

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

"Filtered out" - этот как то, что стало не нужным. Out - этот как "выход", все что выходит из фильтра, то не нужно. 

Проверено на CE. Все что filtered out, то убирает из таблицы не нужное.
 

"Filter out routine(s where) callcount is NOT = значение"

Убирает (отсеивает) из таблицы все, что НЕ РАВНО значению


"Filter" - то что "нужно", то что остается в таблице.
"branches" - здесь описание. Это ветвление от текущей инструкции. Ret, Call, Jmp, Je. Jne и другие условные прыги ведут к ветвлению. Именно об этом речь.

 


Еще есть такая штука как BTS (Branch Trace Store). Есть только у Intel, Нет поддержки у AMD. Это штука, как я понял ведет лог о ветвлениях. И пока эта штука есть в процессоре, то будет работать Ultimap. Об это писал Dark Byte вот здесь.

 

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Было добавлено ещё около 200 строк(может больше).

В 7 случаях есть проблемы.

Возможно позже переведу самостоятельно (всё это не к спеху), но всё равно, на всякий случай, опубликую их тут

 

1) The value can not be encoded using 8 bits and double rotate 

Загвоздка с "double rotate". Кодировка двойным поворотом/вращением? Гугл на эту тему ничего не выдал.

Скрытый текст

procedure generateRotateAndImm(value: integer; var rotate: integer; var imm: integer);
var
  tempv: uint32;
  smallest: record
    rolcount: integer;
    value: uint32;
  end;
  i: integer;

begin
  if value<=255 then
  begin
    imm:=value;
    rotate:=0;
  end
  else
  begin
    //i'm sure there is some sort of calculation for this. For now just brute force it
    smallest.rolcount:=0;
    smallest.value:=value;

    for i:=0 to 15 do
    begin
      tempv:=RolDWord(value, i*2);
      if tempv<smallest.value then
      begin
        smallest.value:=tempv;
        smallest.rolcount:=i;
      end;
    end;

    if smallest.value>255 then raise ENeedRewrite.create(rsTheValue+inttohex(value,1)+rsCanNotBeEncoded);

    rotate:=smallest.rolcount;
    imm:=smallest.value;
  end;
end;  

            

2) Configure a valid binutils setup first

Вроде не сложно, но получается бред при переводе.

 

3) This is an invalid class or method property

"method property". Свойство метода или метод property?

 

Скрытый текст

function getMethodProperty(L: PLua_state): integer; cdecl;
var parameters: integer;
  c: tobject;
  p: string;
  pi: ppropinfo;
  m: TMethod;

  c2: tobject;
begin
  result:=0;
  parameters:=lua_gettop(L);
  if parameters>=2 then
  begin
    if lua_isuserdata(L,1) then
      c:=lua_toceuserdata(L, 1)
    else
    if lua_isnumber(L,1) then
      c:=pointer(lua_tointeger(L,1))
    else
    begin
      p:=Lua_ToString(L,1);
      if p<>'' then
        c:=pointer(StrToInt64(p))
      else
        exit;
    end;

    p:=Lua_ToString(L,2);

    lua_pop(L, lua_gettop(L));

    m:=GetMethodProp(c,p);

    pi:=GetPropInfo(c,p);

    if (pi=nil) or (pi.proptype=nil) or (pi.PropType.Kind<>tkMethod) then
    begin
      raise exception.create(rsThisIsAnInvalidClassOrMethodProperty);
    end;


    if m.data<>nil then
    begin
      luaCaller_pushMethodProperty(L, m, pi.PropType.Name);
      result:=1;
    end
    else
    begin
      lua_pushnil(L);
      result:=1;
    end;
  end
  else
    lua_pop(L, lua_gettop(L));


end; 

 

4) Table file entry already exists for filename: 

Проблема с Table file entry

Скрытый текст

function addLuaTableFile(L: Plua_State; filename: string; filepath: string=''): integer;
var
  i: integer;
  lf: TLuafile;
  s: TMemoryStream;
begin
  result:=0;
  if (indexOfLuaFileByName(filename)=-1) and
     (indexOfLuaFileByName(filename, true)=-1) then
  begin
    try
      s:=TMemorystream.Create;
      try
        if filepath<>'' then
          s.LoadFromFile(filepath);
        lf:=TLuaFile.Create(filename, s);
      finally
        s.Free;
      end;
      i:=mainform.LuaFiles.add(lf);
      result:=pushLuaTableFile(L, i);
      mainform.editedsincelastsave:=true;
    except
      on e : Exception do begin
        lua_pushstring(L, e.className + rsErrorRaisedWithMessage + e.message);
        lua_error(L);
      end;
    end;
  end
  else
  begin
      lua_pushstring(L, rsTableDileEntryAlreadyExistsForFilename + filename);
      lua_error(L);
  end;
end;           

 

5) Groupscan result with no groupscanparser

Результат группового поиска.....?

Скрытый текст

procedure TMainForm.AddToRecord(Line: integer; node: TTreenode = nil;
  attachmode: TNodeAttachMode = naAdd);
var
  Address: ptrUint;
  startbit: integer;
  i,l: integer;

  vt: TVariableType;
  tempvartype: TVariableType;
  addressstring: string;
  newaddresstring: string;

  ct: TCustomType;
  customname: string;
  m: TMemoryRecord;
  ga: PGroupAddress;

  gcp: TGroupscanCommandParser;

  extra: dword;
  value: string;
begin

  //first check if this address is already in the list!
  customname := '';
  l := 0;
  startbit := 0;
  extra:=0;
  ct:=nil;
  gcp:=nil;
  ga:=nil;

  vt := getvartype;
  if vt = vtBinary then //binary
  begin
    startbit := foundlist.getstartbit(line);
    l := memscan.Getbinarysize;
  end
  else
  if vt = vtAll then //all
  begin
    address:=foundlist.GetAddress(line, extra, Value);

    if extra >= $1000 then
    begin
      ct:=TCustomType(customTypes[extra - $1000]);
      customname := ct.Name;
      vt:=vtCustom;
    end
    else
    begin
      ct:=nil;
      vt := TVariableType(foundlist.getstartbit(line));
    end;


  end
  else
  if vt=vtCustom then //custom
  begin
    ct := TCustomType(vartype.items.objects[vartype.ItemIndex]);
    customname := ct.Name;
  end
  else
  begin
    startbit := 0;
    l := foundlist.GetVarLength;
  end;
  address := foundlist.GetAddress(line);

  if foundlist.inmodule(line) then
    addressString := foundlist.GetModuleNamePlusOffset(line)
  else
    addressstring := inttohex(address, 8);


  if vt=vtGrouped then
  begin
    //add as a group
    ga:=foundlist.GetGroupAddress(line);
    if ga=nil then
      raise exception.create(rsGroupscanDataInvalid);

    gcp:=foundlist.getGCP;
    if gcp=nil then
      raise exception.create(rsGroupscanResultWithNoGroupscanparser);


    for i:=0 to length(gcp.elements)-1 do
    begin
      if gcp.elements.picked then
      begin
        if gcp.elements.customtype<>nil then
          customname:=gcp.elements.customtype.name
        else
          customname:='';

        l:=gcp.elements.bytesize;

        vt:=gcp.elements.vartype;
        if vt=vtUnicodeString then
        begin
          vt:=vtString;
          l:=l div 2;
        end;

        newaddresstring:=addressstring+'+'+inttohex(ga.offsets,1);
        addresslist.addaddress(strNoDescription, newaddresstring, [], 0, vt, customname, l, 0, gcp.elements.vartype=vtUnicodeString, node, attachmode);
      end;
    end;

  end
  else
  begin
    m := addresslist.addaddress(strNoDescription, addressString, [], 0,
      vt, customname, l, startbit, False, node, attachmode);

    m.showAsHex:=foundlist.isHexadecimal;

    if m.VarType = vtBinary then
      m.Extra.bitData.showasbinary := rbBit.Checked
    else
    if (m.VarType = vtString) then
      m.Extra.stringData.unicode := foundlist.isUnicode;


  end;

end;                       

 

7) Links directly to the paths of the source .ptr.# files.
Note: The result will be unusable by other systems that do not have the same path layout, until you generate new results
Проблема с 1 предложением
 
Является описанием вот этой опции

749686b841db48b090fc06252fcadb66.jpg

Изменено пользователем SER[G]ANT
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В новой версии CE будет возможность перевести, как минимум, главное окно программы более полно. Наконец-то избавлюсь от мазолющих глаза сокращений.

 

Ранее

Snap8.thumb.jpg.7ebcd006dacdf5dd03512e41

 

Сейчас

Snap7.thumb.jpg.47f6e0181d1e86d35440fc44

 

"Поиск", "Отсев", "Кратность", "Окончание" так и останутся, т.к. при правильном переводе будут сильные сдвиги элементов окна.

"Актив." тоже останется сокращённым, но только из-за того, чтобы данная колонка не была слишком широкой, т.к. в 99% случаев там лишь один чекбокс.

 

"Добавить адрес" так же не буду переводить, как "Ручное добавление адреса" или "Добавить адрес вручную". Ни к чему это, да и не красиво.

"Редактор памяти" под вопросом, всё же, это совершенно не точный перевод "Memory view", но и постоянно менять название часто используемых опций не хочется.

 

Но есть и минусы:

1) Главное окно станет чуть шире

2) С прежними версиям CE будет криво работать, но оно и понятно почему.

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
53 минуты назад, SER[G]ANT сказал:

Поиск", "Отсев", "Кратность", "Окончание" так и останутся,

 

53 минуты назад, SER[G]ANT сказал:

"Добавить адрес" так же не буду переводить,

И не нужно, уже привыкли к такому переводу - кратко и понятно.

Ещё раз спасибо за твою работу!!!:)

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

С предыдущими проблемными строками справился.

Продолжим.

Все строки относятся к Ultimap2. Тут проблема лишь в том, что не могу проверить. Нужен ни только процессор Intel, но и минимум 6 поколения.

 

1) "Instruction Pointer List Size:" - "Размер списка указателя инструкции:"

Вроде всё верно, но немного смущает.

 

2) "Invalidated" - "Аннулирован".

И тут вроде всё верно.

 

3) "Parse trace to textfile" - "Разбор трассировки в текстовый файл" В данном случае, "parse" можно перевести только как "разбор" (по моему мнению). Но лично я, увидев бы такую опцию, просто не понял бы о чём речь. Есть вариант перевести как "Сохранить трассировку в текстовой файл", тем более, что есть подсказка(но она отключена)

"When enabled will write the sequence of events as they happen as plain text to a file called cpu#trace.txt.", которая переводится как "Если включено, то последовательность происходящих событий будет записываться как обычный текст в файл под названием cpu#trace.txt."

 

4) "Sorry, but your CPU doesn't seem to be able to set a target PROCESS"

Тут проблема с "to set a target PROCESS". По идее, речь о "установить процесс в качестве цели". Но больше склоняюсь к тому, что не верно.

 

5) "(Put between *'s to mark as an auto stop range)" - "as an auto stop range" - "как(в качестве) диапазон автоматической остановки"?

 

Snap2.thumb.jpg.51b7fa45de9eb588b8586277

Изменено пользователем SER[G]ANT
1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

DB сегодня опять поломал обновил немного интерфейс.

 

Snap2.thumb.jpg.7c115bd45b9d7a462afd1f77

И теперь не знаю как быть. Толи искать виновника "расширения" окна и как-то сокращать его, чтобы и окно вместе с ним сузилось, толи оставить как есть.

Но как по мне, сейчас слишком уж широко.

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну да, по большей части виною всему колонка справа.

Snap5.jpg.334d9a4f531a2b901f6a48562eaf71

В принципе, "Только простые значения" можно без зазрения совести заменить на "Простые значения", а "Округленное(предельно)" на "Округленное(макс.)".

В итоге размер окна будет хоть и не 1 в 1, но уже.

Изменено пользователем SER[G]ANT
2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
6 часов назад, SER[G]ANT сказал:

В принципе, "Только простые значения" можно без зазрения совести заменить на "Простые значения", а "Округленное(предельно)" на "Округленное(макс.)".

В итоге размер окна будет хоть и не 1 в 1, но уже.

По мне лучше сделать окно уже, как ты и предлагаешь, ибо привычнее - маленькое окно.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Там ещё проблема в изменившимся шрифте у списка адресов. Сузить окно пока никак нельзя.

Может кто захочет потестировать русификатор

https://yadi.sk/d/AJG8J4nguXoLJ

Изменено пользователем SER[G]ANT
2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ещё сузил.

Проблема была ещё и в длине перевода типов поиска "Compare to first scan", "Compare to last scan", "Compare to saved scan". Шире текст - шире комбобокс -  шире главное окно.

Теперь это окончательная ширина(благо теперь не значительно шире), дальнейшее сужение перевода приведёт к его ухудшению.

Snap6.thumb.jpg.63ac7965f28ee54fb2d41481

 

Так же пока имеются проблемы с pnlScanOptions при выборе группового типа значения

21223d3baa.jpg.9d25931f8d9dd1892e6ad43ea

 

И с размером таба в параметрах отладчика

Snap7.jpg.137554ebeb1ac2d50f19c37d8aaf58

Но об этом я написал Dark Byte, возможно поправит.

 

Есть ещё косяки, но не существенные.

 

2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Все косяки из прошлого сообщения решены. Правда "Предыдущее" теперь переводиться как "Прежнее", иначе оно отображается не полностью и приходиться растягивать окно вручную.

 

Но нашёл свой огромнейший косяк.

После добавления строк перевода для

function VariableTypeToString(variableType: TVariableType): string;
begin
  case variabletype of
    vtAll: result:='All';
    vtBinary: result:='Binary';
    vtByteArray: Result:='Array of byte';
    vtByte: result:='Byte';
    vtWord: Result:='2 Bytes';
    vtDword: Result:='4 Bytes';
    vtQword: Result:='8 Bytes';
    vtSingle: Result:='Float';
    vtDouble: Result:='Double';
    vtString: Result:='String';
    vtUnicodeString: Result:='Unicode String';
    vtPointer: result:='Pointer';
    vtAutoAssembler: Result:='Auto Assembler Script';
    vtCustom: Result:='Custom';
  end;

Сохранённые таблицы повреждались (случайно заметил, поламывая переиздание Titan Quest). Можно было бы и фиксануть, но тогда таблицы не были бы универсальными, работали бы в той языковой версии CE, в которой создавались, что ни есть хорошо.

Отправил в SVN исправление, точнее возврат к оригиналу.

Но теперь типы значений в анализе структур переведены не будут. Но это небольшая потеря.

 

Чуть позже выложу обновлённый CE + русификатор.

P.S. плюсов не нужно.

3

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, SER[G]ANT сказал:

P.S. плюсов не нужно.

:D

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Последняя ревизия CE + русификатор

https://yadi.sk/d/SBTe3qTFuoXyB

Изменено пользователем SER[G]ANT
2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Теперь в CE можно легко переключаться между языками

Snap4.thumb.jpg.5e5c8c58e4bafcc9b0f3647f

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

DB добавил голосовое оповещение об (де)активации горячих клавиш

Snap6.thumb.jpg.98d616132976c6472399e956

 

И тут вопрос.

Переводить ли {MRDescription} "Activated/Deactivated"? Если перевести, то на русском будет озвучиваться.
Но ведь таблицы/.CETRAINER кто-то может выкладывать и для забугровых пользователей, и будет у них звучать "Активировано".

Хотя, это поле можно просто отредактировать и самому туда вписывать что хочешь и на любом языке.

Как лучше/удобней?.

 

"Force English" - Скорее всего тут "Ускорить...", но вариантов много, но пока не знаю как перевести точно, ибо эта опция не работает не на english системах. Может кто подскажет как правильно, в противном случае, нужно будет на виртуалку ставить english версию.

 

И раз уж затронул перевод.

Int3 instructions (Execute BP only, falls back to hardware bp) (Unlimited)

Как переводиться текст в скобках? Просто у меня билеберда получается и в данный момент, переведено просто "Int3 инструкции (Неограниченно)".

Изменено пользователем SER[G]ANT
1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, SER[G]ANT сказал:

Переводить ли {MRDescription} "Activated/Deactivated"? Если перевести, то на русском будет озвучиваться.
Но ведь таблицы/.CETRAINER кто-то может выкладывать и для забугровых пользователей, и будет у них звучать "Активировано".

Хотя, это поле можно просто отредактировать и самому туда вписывать что хочешь и на любом языке.

Как лучше/удобней?.

По этому вопросу - мне кажется лучше оставить на английском - так как в России думаю Activated/Deactivated уже и бабушки знают что это такое.:) 

 

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Пара вопросов.

 

В контекстном меню стека добавили строку "(ref+*) Ref will be %x"

Snap1.jpg

По идее ref - это "Reference", т.е. "ссылка", т.к. выполняется код

...
egin
  if lvStacktraceData.Selected<>nil then
  begin
    s:=lvStacktraceData.Selected.Caption;
    i:=pos('(', s);
    if i>0 then
      s:=copy(s,1,i-1);

    x:=symhandler.getAddressFromName(s,false,haserror);

    if not haserror then
    begin
      StackReference:=x;
      reloadStacktrace;
    end;                 
...

Выходит, что переводиться как "(ref+*) Ссылкой будет <адрес>", но что-то смущает. Всё ли верно?

 

 

 

Опять тут же. Описание(hint) данного окна:

 

"Shows the current stack.
Tip: When doubleclicking the value and it represents an address, then you can hold shift to make it show in the disassembler, and ctrl to make it show in the memory view. Else Cheat Engine will guess it for you based on if it's executable memory or not."

 

Вот тут какой-то взрыв мозга прям, множество вариантов перевода и ни в одном не уверен.

 

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не уверен, надо смотреть в CE как работает функция.

 

Если нажали на space на адресе стека, то переход будет как CE угадывает, либо в MemHex область, либо в Disassembler область. Если держали shift или ctrl и двойной клик, то переход уже прямой, либо в первом случае в disassembler, либо во втором случае переход в memory view.

 

Или же если нажать на space, то стек отобразится не по ESP, а по адресу, который выделили в стеке.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, MasterGH сказал:

Не уверен, надо смотреть в CE как работает функция.

 

Если нажали на space на адресе стека, то переход будет как CE угадывает, либо в MemHex область, либо в Disassembler область. Если держали shift или ctrl и двойной клик, то переход уже прямой, либо в первом случае в disassembler, либо во втором случае переход в memory view.

Немного не так выразился.

Цитата

 

"Shows the current stack.

Tip: When doubleclicking the value and it represents an address, then you can hold shift to make it show in the disassembler, and ctrl to make it show in the memory view. Else Cheat Engine will guess it for you based on if it's executable memory or not."

 

Это описания окна стека и к "(ref+*) Ref will be %x" не имеет отношения.

Загвоздка у меня именно с переводом "...the value and it represents an address..". Я не могу перевести это однозначно и сказать самому себе, что это верно.

 

А что касаемо "(ref+*) Ref will be %x"

3 часа назад, MasterGH сказал:

Или же если нажать на space, то стек отобразится не по ESP, а по адресу, который выделили в стеке.

Даже если подсократить твоё объяснение, всё равно получиться длинно. 

Но переводить как "(ref+*) Ссылкой будет <адрес>" (и это правильный перевод) тоже не хочется, т.к. будет не понятно, что делает эта опция (по крайней мере, лично мне)

 

Проблема ещё заключается в том, что ни даблклик с шифтом или контролом, ни эта ref не работают.

 

P.S.

Нужно завязывать с русификатором.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

С предыдущим разобрался.

 

Теперь нужно ещё 3 строки перевести, связанных с Java. Скорее всего и сам потом переведу, но и от помощи не откажусь.

 

1) "Array return types are not supported"

Скрытый текст

function java_invokeMethod(object, methodid, ...)
  local argumentcount=#arg
  local name, sig, gen=java_getMethodName(methodid)

  --parse sig to find out what to give as parameters and what to expect as result (I am assuming the caller KNOWS what he's doing...)

  --format of sig: (ABC)D  () part are the parameters, D is the return type
  local result=nil

  parsedsignature=java_parseSignature(sig)

  --convert returntype to the id used by JAVACMD_INVOKEMETHOD

  local returntype=Java_TypeSigToIDConversion[string.sub(parsedsignature.returntype,1,1)]
  if returntype>=10 then
    error(translate('Array return types are not supported'));  <-----------

  if argumentcount~=#parsedsignature.parameters then
    error(translate('Parameter count does not match'))
  end

 

 

2) "Invalid constant pool tag encountered: " (constant pool, как я понимаю, тут переводить не нужно)

Скрытый текст

function java_parseConstantPool(s, count)
  local i
  local result={}


  for i=1,count-1 do
    local tag=java_read_u1(s)

  --print(tag.." "..string.format("%x",s.index))

  if java_parseConstantPoolTag[tag]~=nil then
    result[i]=java_parseConstantPoolTag[tag](s)
  else
    error(translate("Invalid constant pool tag encountered: ")..s.index..translate(" (tag=")..tag..") (i="..i..")")  <-----------
  end

  end

  return result
end

 

 

3)  "You can only replace instructions on an instruction boundary"

Скрытый текст

function javaclass_applyAssembleCommand(class, method, byteindex, instruction, insert)
  local codeattribute=javaclass_method_findCodeAttribute(method)

  local labels=codeattribute.code.labels
  local exceptions=codeattribute.exception_table


  --get the size of the instruction to be assembled (plus side: unlike intel with it's horrible and easily reachable 128 byte limit for small branches, java gives 32768 bytes, so less chance of an insertion causing problems)
  local newcode
  local codeattribute_codeIndex=nil


  newcode=singleLineBytecodeAssembler(byteindex, instruction, labels,false) --get the size, but don't mess with the labels

  local i,j

  local startindex=byteindex
  local offset=0

  --update the labels and exception table based on the size

  startindex=byteindex

  if insert then
    offset=newcode.bytesize
  else
    local oldcode=nil

    for i=1, #codeattribute.code do
      if codeattribute.code[i].byteindex==byteindex then
        oldcode=codeattribute.code[i]
        break
      end
    end

    if oldcode==nil then
      error(translate('You can only replace instructions on an instruction boundary'))  <-----------
    end

    offset=newcode.bytesize-oldcode.bytesize
  end

 

 

Изменено пользователем SER[G]ANT
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Как мне представляется:

2) "Invalid constant pool tag encountered: " - "Повстречался неверный тег пула констант: "

3) "You can only replace instructions on an instruction boundary" - "Вы можете заменять инструкции только на границе инструкции"

 

1) "Array return types are not supported" - по идее, переводиться как: "Массив возвращаемого типа (или просто возвращаемый массив) не поддерживается". Но есть сомнения

Изменено пользователем SER[G]ANT
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас