partoftheworlD
-
Постов
2 687 -
Зарегистрирован
-
Посещение
-
Победитель дней
172
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные partoftheworlD
-
-
5 минут назад, MasterGH сказал:
jmp short noerror
хм, видимо short/far надо обязательно указывать.
-
По докам вообще не понятно, какие исключения будет отлавливать except, если все, то может вызывать проблемы, а если можно задавать, то как.
Хотя я все так же убежден, что проще сделать чит на другой инструкции, чем использовать текущую с кучей фильтров.
-
Как вариант, могу предложить парсить карту, если такая имеется.
В играх на соурс движке карта имеет формат bsp в которой прописаны все меши.
Второй вариант, использовать лучи трассировки, для измерения самых дальних участков карты.
-
3 часа назад, Antonshka сказал:
Если calculate вернет 0, то условие "if (calculate(method, a, b, c, d))" - будет ложно, и сработает brear для цикла while (stop != 'n'), - этот момент понятен.
Не понятно почему while (stop != 'n') зависит от этого возвращаемого нуля - "default: cout << "wrong answer" << endl; return 0;". Ведь в условии выполнения while только значение переменной stop. Или этот 0 возвращается для int main()?
calculate возвращает состояние 1 если посчиталось, 0 при wrong method и выходит из calculate, ведь какой смысл если вычисления не удались выдавать
cout << "calculate again? (y\\n): ";
3 часа назад, Antonshka сказал:default: cout << "wrong answer" << endl; return 0; //как влияет return 0 на программу?
выход не из цикла, а сразу из main для завершения программы. Не лучший способ, но за ошибки надо платить, хотя бы выходом из программы.?
3 часа назад, Antonshka сказал:Но что если нужно снова спросить о желании расчёта?
Ну что ж, придется быть внимательным и вводить всегда "y".
3 часа назад, Antonshka сказал:Если 0 для while , то верно ли то, что любой цикл, будь то for, while, do, можно завершить не только изменив условие цикла или выполнив break, но и вернув ему (циклу) 0? А значит можно записать код так?
Не, break выходит из цикла/свича, return выходит из метода.
т.е break используется, когда не надо завершать программу и продолжать выполнение/повторение. return используется, когда надо завершить выполнение метода.
3 часа назад, Antonshka сказал:Если при выполнении функции случится выполниться методу "return чего либо", например в середине функции, то значит ли это то, что функция на этом самом месте немедленно прекратит свою работу, вернув результат, несмотря на то, что другая часть/части этой функции также желали быть исполненными?
Именно так.
-
-
6 минут назад, Senpai сказал:
не понял
-
15 минут назад, Senpai сказал:
в самом андроиде или как
Во вкладке Connections включай удаленный доступ, чтобы сервер поднялся. С андройда переходишь по адресу который высветится и устанавливаешь сертификат.
-
Немного лучше так.
Спойлер#include <iostream> using namespace std; void header(char dummy, int &a, int &b, int &c, int &d) { cout << "enter first fraction (a / b): "; cin >> a >> dummy >> b; cout << "enter second fraction (c / d): "; cin >> c >> dummy >> d; cout << "method: "; } bool calculate(char m, int &a, int &b, int &c, int &d) { switch (m) { case '+':cout << a * d + b * c << " / " << b * d << endl; break; case '-':cout << a * d - b * c << " / " << b * d << endl; break; case '*':cout << a * c << " / " << b * d << endl; break; case '/':cout << a * d << " / " << b * c << endl; break; default : cout << "wrong method" << endl; return 0; } return 1; } int main() { int a, b, c, d; char dummy = 'a'; char method = 'a'; char stop = 'y'; while (stop != 'n') { header(dummy, a, b, c, d); cin >> method; if(calculate(method, a, b, c, d)) { cout << "calculate again? (y\\n): "; cin >> stop; switch(stop) { case 'y': continue; case 'n': break; default : cout << "wrong answer" << endl; return 0; } } else { break; } } return 0; }
Немного офтопа о cpp. Т.к. это лучшее объяснение как работать с языком.ЦитатаИ тут мы поняли, что многие не знают как правильно пользоваться этой функцией. Так вот, правильное использование — не пользоваться.
-
Fiddler, надо будет сгенерировать сертификат и установить на эмулятор.
-
1 час назад, Antonshka сказал:
Порой он полезен.
Как говорилось в одной книге, кажется Страуструпа. "Если есть смысл в использовании goto, то стоит задуматься о том, чтобы переписать код"
Проблемы с использованием goto еще обсуждались в 1968 году, т.е да он как бы не плох, но вреда от него больше, чем пользы, особенно если это крупный проект.1 час назад, Antonshka сказал:У тебя правда она получилась немного кривоватая
Ну я "программист", а не художник, пусть красивостями другие занимаются.?
-
1 час назад, Antonshka сказал:
Вариант решения задания без for, while, do, recursive function, string()
GOTO это тот же jmp label(цикл) и считается дурным тоном использовать его.
- 1
-
2 часа назад, helicopter сказал:
Там вызов совершается не CALL'ом, а именно джампом(условным/безусловным)
Перекрестные ссылки тогда.
-
25 минут назад, helicopter сказал:
собственно узнать откуда был совершен прыжок на этот конкретный SUB?
https://ru.wikipedia.org/wiki/Стек_вызовов
https://server.179.ru/tasks/cpp/total/096.html
В отладчике вкладка Stack View/Стек вызовов
-
1 час назад, rugraver сказал:
или (большая хотелка) вес инвентаря, хоть изначальный 80кг хоть примороженый как-то
Надеюсь хватит грузоподъемности.
Спойлер[ENABLE] aobscan(MaxWeight, F3 0F 10 8E 00 01 00 00 F3 0F 5A C9 F2 0F 5E C1 F2 0F 5A E8 F3 0F 11 6C 24 10 F3 0F 10 44 24 10) // should be unique aobscan(StartEquipment,48 63 8F F0 00 00 00 3B) // should be unique alloc(StartEquipment_newmem,$1000) alloc(MaxWeight_newmem,$1000) label(MaxWeight_code) label(MaxWeight_return) label(StartEquipment_code) label(StartEquipment_return) MaxWeight_newmem: MaxWeight_code: mov [rsi+00000100],(float)999999 movss xmm1,[rsi+00000100] jmp MaxWeight_return MaxWeight: jmp MaxWeight_newmem nop nop nop MaxWeight_return: registersymbol(MaxWeight) StartEquipment_newmem: StartEquipment_code: mov [rdi+000000F0],#20 movsxd rcx,dword ptr [rdi+000000F0] jmp StartEquipment_return StartEquipment: jmp StartEquipment_newmem nop nop StartEquipment_return: registersymbol(StartEquipment) [DISABLE] MaxWeight: db F3 0F 10 8E 00 01 00 00 StartEquipment: db 48 63 8F F0 00 00 00 unregistersymbol(StartEquipment) unregistersymbol(MaxWeight) dealloc(StartEquipment_newmem) dealloc(MaxWeight_newmem) { // ORIGINAL CODE - INJECTION POINT: StartEquipment 1AB0BCDB4B8: 00 00 - add [rax],al 1AB0BCDB4BA: 00 00 - add [rax],al 1AB0BCDB4BC: 00 00 - add [rax],al 1AB0BCDB4BE: 00 00 - add [rax],al 1AB0BCDB4C0: 48 83 EC 18 - sub rsp,18 1AB0BCDB4C4: 48 89 34 24 - mov [rsp],rsi 1AB0BCDB4C8: 48 89 7C 24 08 - mov [rsp+08],rdi 1AB0BCDB4CD: 48 8B F1 - mov rsi,rcx 1AB0BCDB4D0: F3 0F 10 86 04 01 00 00 - movss xmm0,[rsi+00000104] 1AB0BCDB4D8: F3 0F 5A C0 - cvtss2sd xmm0,xmm0 // ---------- INJECTING HERE ---------- 1AB0BCDB4DC: F3 0F 10 8E 00 01 00 00 - movss xmm1,[rsi+00000100] // ---------- DONE INJECTING ---------- 1AB0BCDB4E4: F3 0F 5A C9 - cvtss2sd xmm1,xmm1 1AB0BCDB4E8: F2 0F 5E C1 - divsd xmm0,xmm1 1AB0BCDB4EC: F2 0F 5A E8 - cvtsd2ss xmm5,xmm0 1AB0BCDB4F0: F3 0F 11 6C 24 10 - movss [rsp+10],xmm5 1AB0BCDB4F6: F3 0F 10 44 24 10 - movss xmm0,[rsp+10] 1AB0BCDB4FC: F3 0F 5A C0 - cvtss2sd xmm0,xmm0 1AB0BCDB500: F3 0F 10 0D 88 00 00 00 - movss xmm1,[1AB0BCDB590] 1AB0BCDB508: F3 0F 5A C9 - cvtss2sd xmm1,xmm1 1AB0BCDB50C: 66 0F 2F C8 - comisd xmm1,xmm0 1AB0BCDB510: 0F 8A 4F 00 00 00 - jp 1AB0BCDB565 } { // ORIGINAL CODE - INJECTION POINT: MaxWeight 1AB0BC553AF: 48 8B 45 A8 - mov rax,[rbp-58] 1AB0BC553B3: 48 8B C8 - mov rcx,rax 1AB0BC553B6: 48 83 EC 20 - sub rsp,20 1AB0BC553BA: 48 8B 00 - mov rax,[rax] 1AB0BC553BD: 90 - nop 1AB0BC553BE: 90 - nop 1AB0BC553BF: 90 - nop 1AB0BC553C0: FF 90 D0 02 00 00 - call qword ptr [rax+000002D0] 1AB0BC553C6: 48 83 C4 20 - add rsp,20 1AB0BC553CA: 48 63 87 EC 00 00 00 - movsxd rax,dword ptr [rdi+000000EC] // ---------- INJECTING HERE ---------- 1AB0BC553D1: 48 63 8F F0 00 00 00 - movsxd rcx,dword ptr [rdi+000000F0] // ---------- DONE INJECTING ---------- 1AB0BC553D8: 3B C1 - cmp eax,ecx 1AB0BC553DA: 0F 8C E7 00 00 00 - jl 1AB0BC554C7 1AB0BC553E0: 45 33 E4 - xor r12d,r12d 1AB0BC553E3: E9 C9 00 00 00 - jmp 1AB0BC554B1 1AB0BC553E8: 48 8B 47 38 - mov rax,[rdi+38] 1AB0BC553EC: 49 63 CC - movsxd rcx,r12d 1AB0BC553EF: 39 48 18 - cmp [rax+18],ecx 1AB0BC553F2: 0F 86 66 03 00 00 - jbe 1AB0BC5575E 1AB0BC553F8: 48 8D 44 C8 20 - lea rax,[rax+rcx*8+20] 1AB0BC553FD: 48 8B 00 - mov rax,[rax] }
- 1
-
18 минут назад, rugraver сказал:
Инвентарь находит мне 1 float
Если есть желание сделать самому, то могу подсказать, что это правильное значение.
-
-
24 минуты назад, rugraver сказал:
что там в скрипте не так?
проблема была в ret, который просто затирался вместо прыжка в оригинальный код, просто выходим из функции и возвращаем управление вызвавшей её.
Играю несколько часов, вроде проблем нет.
9 часов назад, partoftheworlD сказал:{ Game : OsirisNewDawn.exe Version: Date : 2019-04-05 Author : Alexander This script does blah blah blah } [ENABLE] aobscan(sad,48 63 40 60 48 83 C4 08) // should be unique alloc(newmem,$1000,1EA944F4E4B) label(code) label(return) newmem: code: mov [rax+60],#99 movsxd rax,dword ptr [rax+60] add rsp,08 ret sad: jmp newmem nop nop nop return: registersymbol(sad) [DISABLE] sad: db 48 63 40 60 48 83 C4 08 c3 unregistersymbol(sad) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: 1EA944F4E4B 1EA944F4E34: 01 50 00 - add [rax+00],edx 1EA944F4E37: 00 00 - add [rax],al 1EA944F4E39: 00 00 - add [rax],al 1EA944F4E3B: 00 00 - add [rax],al 1EA944F4E3D: 00 00 - add [rax],al 1EA944F4E3F: 00 48 83 - add [rax-7D],cl 1EA944F4E42: EC - in al,dx 1EA944F4E43: 08 48 89 - or [rax-77],cl 1EA944F4E46: 0C 24 - or al,24 1EA944F4E48: 48 8B C1 - mov rax,rcx // ---------- INJECTING HERE ---------- 1EA944F4E4B: 48 63 40 60 - movsxd rax,dword ptr [rax+60] 1EA944F4E4F: 48 83 C4 08 - add rsp,08 // ---------- DONE INJECTING ---------- 1EA944F4E53: C3 - ret 1EA944F4E54: 00 00 - add [rax],al 1EA944F4E56: 00 00 - add [rax],al 1EA944F4E58: 00 00 - add [rax],al 1EA944F4E5A: 00 00 - add [rax],al 1EA944F4E5C: 14 00 - adc al,00 1EA944F4E5E: 00 00 - add [rax],al 1EA944F4E60: 24 00 - and al,00 1EA944F4E62: 00 00 - add [rax],al 1EA944F4E64: 01 04 01 - add [rcx+rax],eax }
-
10 минут назад, rugraver сказал:
Стала крашиться и от скрипта оружия (и от Вашего, и от своего)
Я свой поправил уже, теперь нет вылетов)
15 минут назад, rugraver сказал:ВСЕ итемы стали 5/5 (по игре там стек из 5 аптечек), и при сборе ресурса игра крашится
Решается простым фильтром по ItemInfo.type или как-то так. Ведь когда предмет добавляется, так же передается его id.
-
1 час назад, energypower сказал:
этот указатель ppReturnedDeviceInterface
Указатель на устройство.
1 час назад, energypower сказал:Поможете мне с конкретной игрой, а то так и не понял.
Нет, нахождение устройства везде одинаковое. Это только в раздел запросов.
-
50 минут назад, imaginary сказал:
И он идёт пишет разработчикам
Ну да, на пиратке, сброки хххх, беты у происходит ...
На самом деле, даже без взлома у меня патроны обнулялись после перезахода в игру, ладно бы там была механика, типа, безопасности на корабле и оружие должно быть разряжено, давали бы доп.обойму.
Так что либо, это дурацкая механика, либо баг.("не баг, а фитча").
-
Может стоит воспользоваться поиском по форуму?
-
Можно одним только CE обойтись, но он ужасен, так что следует использовать разные инструменты, например dnSpy.
В CE во вкладке с моно ищешь "LoadAmmo" и переходишь по LoadAmmo в дизассемблер. Находишь пишущую инструкцию.Стреляешь.
Спойлер{ Game : OsirisNewDawn.exe Version: Date : 2019-04-05 Author : Alexander This script does blah blah blah } [ENABLE] aobscan(sad,48 63 40 60 48 83 C4 08) // should be unique alloc(newmem,$1000,1EA944F4E4B) label(code) label(return) newmem: code: mov [rax+60],#99 movsxd rax,dword ptr [rax+60] add rsp,08 ret sad: jmp newmem nop nop nop return: registersymbol(sad) [DISABLE] sad: db 48 63 40 60 48 83 C4 08 c3 unregistersymbol(sad) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: 1EA944F4E4B 1EA944F4E34: 01 50 00 - add [rax+00],edx 1EA944F4E37: 00 00 - add [rax],al 1EA944F4E39: 00 00 - add [rax],al 1EA944F4E3B: 00 00 - add [rax],al 1EA944F4E3D: 00 00 - add [rax],al 1EA944F4E3F: 00 48 83 - add [rax-7D],cl 1EA944F4E42: EC - in al,dx 1EA944F4E43: 08 48 89 - or [rax-77],cl 1EA944F4E46: 0C 24 - or al,24 1EA944F4E48: 48 8B C1 - mov rax,rcx // ---------- INJECTING HERE ---------- 1EA944F4E4B: 48 63 40 60 - movsxd rax,dword ptr [rax+60] 1EA944F4E4F: 48 83 C4 08 - add rsp,08 // ---------- DONE INJECTING ---------- 1EA944F4E53: C3 - ret 1EA944F4E54: 00 00 - add [rax],al 1EA944F4E56: 00 00 - add [rax],al 1EA944F4E58: 00 00 - add [rax],al 1EA944F4E5A: 00 00 - add [rax],al 1EA944F4E5C: 14 00 - adc al,00 1EA944F4E5E: 00 00 - add [rax],al 1EA944F4E60: 24 00 - and al,00 1EA944F4E62: 00 00 - add [rax],al 1EA944F4E64: 01 04 01 - add [rcx+rax],eax }
И все.
Нужны указатели - восстанавливай руками начиная от патрон. Выйдет около 4-5 уровней.(6)
4 часа назад, rugraver сказал:но при перезагрузке возрождаешься с 0 патронов
А это уже баг/механика игры, не зависящий от правки инструкций. Это к разработчикам.
-
Почему бы не погуглить? Обработчик исключений был бы идеальным решением, проверки адресов. https://wiki.cheatengine.org/index.php?title=Auto_Assembler:TRY_EXCEPT
Там даже пример есть. Ох уж любители костылей.
ЦитатаIn this example, if any error occurs - for example, ecx is zero or ecx+10 is unreadable -, eax will be set to zero:
{$try}
mov eax,[ecx+10]
jmp short noerror
{$except}
xor eax,eax
noerror:
-
10 минут назад, srg91 сказал:
но кажется у меня получилось чуть лаконичнее
Лаконичней это как в Python, все остальное это изврат.?
как исключить не действительные адреса из фильтра ?
in Cheat Engine
Опубликовано
http://bfy.tw/N95v