Перейти к содержанию

ffffffffff

Стажёры
  • Постов

    7
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные ffffffffff

  1. на версиях до CE 6.0
    я как раз с 6 работаю и до этого CE в глаза не видел, не знал что в нем компилятор есть О_о. В 6 же вроде нет. По чему то ведь от него решили отказаться, значит какие то подводные камни все таки есть с ним.

    На счет дизасемблера, вроде как можно автоматизировать т.к. в CE работает LUA , в мануале есть функции но не ясно что делает та или иная ф-ция

    например пишу

    t=readBytes(0x00B307E4,10)

    showMessage(t)

    выводит 242 что эквиваленто тому если бы я в таблицы указал тип данных для поля просто byte , хотя вроде как вторая переменная 10 означает кол-во байт т.е. Array of Bytes , но от изменения этого числа ничего не изменяется

    , хотя если напрямую через таблицу в type указать соответственно Array of Bytes выведет как надо E9 3C F8 79 04 90 90 90 EB 08 . Вообщем надо читать, но на первый взгляд того что надо нет

  2. Можно ли как то представить Auto Assamblerовский код ввиде набора hex вставок ? В TSearch была такая удобная подпрограмма EASYWRITE INTERPRETER называлась, по нажатию "Tmk" асм код представал в виде hex значений вроде Poke _Адрес_ FF FF FF FF FF FF...

    Но так как прога старая, на некоторые типы опкодов она реагирует неадекватно и пишет unknown identifer например на movsd xmm0,[esi+000000D0]

    Так вот можно ли подобное реализовать в CE для дальнейшего использования в трейнере

    Вот например один скрипт из моей таблицы ("One Hit Kill" для Mafia 2 патч 3), который TSearch не "проглотил" ,


    [ENABLE]
    alloc(allpedsp,2048)
    label(returnhere)
    label(originalcode)
    label(exit)
    label(ggpoint)
    label(returnhere2)
    label(originalcode2)
    label(exit2)
    label(Health)
    registersymbol(Health)
    allpedsp:
    push eax
    mov eax, [Health]
    cmp eax,ebp
    pop eax
    je originalcode
    mov [ebp+000000D0],0
    originalcode:
    comiss xmm0,[ebp+000000D0]
    exit:
    jmp returnhere
    ggpoint:
    mov [Health],esi
    originalcode2:
    movsd xmm0,[esi+000000D0]
    exit2:
    jmp returnhere2

    Health:
    dd 0

    "mafia2.exe"+591133:
    jmp allpedsp
    nop
    nop
    returnhere:

    "mafia2.exe"+7307E4:
    jmp ggpoint
    nop
    nop
    nop
    returnhere2:


    [DISABLE]
    dealloc(ggpoint)
    "mafia2.exe"+7307E4:
    movsd xmm0,[esi+000000D0]
    dealloc(allpedsp)
    "mafia2.exe"+591133:
    comiss xmm0,[ebp+000000D0]
    unregistersymbol(Health)

    Без синтаксиса CE этот код выглядел бы примерно так


    mov [00400019],esi
    movsd xmm0,[esi+000000D0]
    nop
    nop
    nop
    nop
    nop
    nop

    offset 00991133 ; Функция работает со здоровьем всех педов
    jmp 00400019

    offset 00400019 ; code cave
    dd 0
    push eax
    mov eax, [00400019]
    cmp eax,ebp
    pop eax
    je originalcode
    mov [ebp+000000D0],0
    originalcode:
    comiss xmm0,[ebp+000000D0]
    jmp 00991133
    offset 00B307E4 ; Функция работает только со здоровьем ГГ

    В ручную искать в дизасемблеровом просмоторщике не очень хочется.

    Да и вообще как сейчас трейнероделы поступают? :)

  3. MasterGH LUA то штука универсальная. Её и так ко всему можно прикрутить , не обязательно CE за собой везде таскать. Сейчас либы под делфи LUAшные изучаю, застопорился на простой и основной вещи - таблицы

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

    Опираясь на вот этот материал писал

    Открыть


    var i:integer;
    begin
    lua_getglobal(L,Pchar(table));
    if not lua_istable(L,-1) then
    begin
    Result:='';
    Exit;
    end;
    lua_pushnil(L);
    i:=1;

    while lua_next(L,i) <> 0 do
    begin
    case lua_type(L,-2) of
    LUA_TSTRING: Result:=Result+string(lua_tostring(L,-2))+' ';
    end;

    case lua_type(L,-1) of
    LUA_TSTRING: Result:=Result+string(lua_tostring(L,-1))+' ';
    end;
    lua_pop(L,1);
    end;
    end;
    function get(table: string):string;

    а вот если не с массивом то все ок


    lua_getglobal(L, 'width');
    lua_getglobal(L, 'height');

    Width := lua_tonumber(L, -2);
    Height := lua_tonumber(L, -1);
      

    На деле функция выводит имена ВСЕХ функции\переменных\массивов в глобале L без значений, даже если type является string, хотя с обычными переменными проблем нет.

    Примеров по этой теме маловато, но если тему развить, можно и универсальный трейнер сделать, со своим "must have" набором функций. Если по луа мануалы или примеры встречались, выложите кто - нибудь.

  4. MasterGH Вообще то просто скинул сурсы своего трейнера. Умный человек скачает, откроет , по изучает. Про изменение мануал, содержимого ваших записей ничего не писал и ни кого обидеть не хотел.

    PS Процесс создания трейнера на делфи описать статейкой могу , если мне самому она понравится , обязательно выложу здесь, а там уже на ваше усмотрение...

  5. У вас в шапке уж больно увесистый и некомпактный трейнер в качестве примера приведен. Прошлым летом интересовался программированием трейнеров, в качестве языка выбрал Делфи, если кому интересно вот мой вариант, писался для игры GRID версии 1.3. Скачать исполняемый файл вышел всего в 48кб. Инклудов использовано по минимуму, больше и не надо.

    trainer+src.rar

  6. Примеры вроде хорошие. Но вот решил на FASM испытать, скомпилить не удалось. Убрал лишние ссылки на инклуды вроде плеера XM'ов и about, при компилировании все хорошо, а на деле после запуска даже диалогового окна не выводит.

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

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.