Перейти к содержанию
  • записи
    104
  • комментариев
    125
  • просмотра
    15 624

Исследование условия связанного со спавном


MasterGH

1 611 просмотр

1. Нашел адрес патронов

2. Поставил брейкпоинт

3. Выкинул из рук Калаш с этими патронами

4. Увидел инструкцию, которая срабатывает когда что-то выкидываешь.

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

58c044a434805_2.png.6bb12c50ce67ce23c46f

 

Решил зацепиться за эту инструкцию.

 

Либо спавн до инструкции, либо после.

Сделал трейслог из рутины на этой инструкции и второй — в рутину, которая срабатывала постоянно, когда ничего не выкидывали (маркеры слева на сриншоте снизу).

Поставил кнопкой бряки на все инструкции ветвления

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

58c045d09858e_3.png.3361b6d29e15d6bf85bf

 

Снимал бряки, когда в игре ничего не делал по F5

Затем, когда прерываться перестал. Оказался на том месте на скриншоте. Там уже идет ветвление, когда выкидываешь.

Сделал трейслог из рутины на этой инструкции и второй — в рутину, которая срабатывала постоянно, когда ничего не выкидывали.

 

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

58c043e62b6a6_.thumb.png.e9a35bbaa50cb0b

 

Получается что-то типа этого условия

cmp [[edi+00048704]+10],[[edi+00048704]]

 

Если предмет из рук не выкидывается на сцену, то условие истины и происходит прыжок. Если оружие было викинуто, то в правой части другое значение. Затем левая и правая где-то дальше обнулятся.

------------------

Что я хочу сделать. Разобраться с поиском условий по ветвлениям, которые изменяют [[edi+00048704]+10] и [[edi+00048704]], делать это по аналогии как было описано выше. Для начала, для спавна не запускать поток на его функции, а поменять данные, которые проверяют условия (где-то по рутине), чтобы предметы сами из рук выкидывались. Пока так.

5 Комментариев


Рекомендуемые комментарии

В 28.07.2017 в 01:39, X86Jumps сказал:

откуда 3й пунк в контекстном меню в trace?

установка breakpoint on calls?

 

Этот пункт сделан Lua скриптом. Думаю, он есть в репозитории у меня и его можно поставить. Без него тоже можно вручную на call-ы поставить брейкпоинты из трейслога. Потом идем в игру, в оконном режиме и нажимаем F5 и снимаем брейкпоинт по F2 пока не перестанут срабатывать эти call-ы. Затем делаем нужное действие в игре и срабатывает первый call. С этого место можно снять трейслог в глубину до адреса параметра. Потом посмотреть этот трейслог.

Ссылка на комментарий
В 29.07.2017 в 09:57, MasterGH сказал:

Этот пункт сделан Lua скриптом.

а как можно дописывать в текущие меню?

через форму tracer?а его как получить?

что то в "Script Engine" я не видел намека на обращение к родным окнам

Ссылка на комментарий

disaasembler.CT, строка 1015

 

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

		-- Добавление контекстной функции устаноки брейкпоинтов на меню
		local menuItems = _frmTracelog.findComponentByName('pmTracer').Items
		local menuItemSetBreakPoint = createMenuItem(menuItems)
		menuItemSetBreakPoint.Caption = 'Set breakpoints on calls'
		menuItemSetBreakPoint.OnClick = function ()
		
			local resultString = inputQuery('Set name tracelog', 'Name:', 'Change ammo, health... etc')
			if(resultString ~= nil) then
				obj.frmTracelog.Caption = resultString
			end
		
			local tableAddresses = obj:GetTableExitLocalBranches(obj.frmTracelog.lvTracer)
			local tableBreakPoints = debug_getBreakpointList()
			for i=1, #tableAddresses do
				local previousAddress = getPreviousOpcode(tableAddresses[i])
				if(not obj:TableContaints(tableBreakPoints, previousAddress)) then
					setComment(previousAddress, string.format('RET -->> %s (%s)', i, resultString))
					debug_setBreakpoint(previousAddress, vtByte, bptExecute)
				end
			end
		end

 

 

Ссылка на комментарий

да я понял что  основой для какого либо обращеня к формам CE есть функции getFormCount/getForm

я как то не обратил внимания, потом когда скрипт смотрел нашел где ж все начинается

 

тупой вопрос, но я не понял)) а почему previousopcode?если мы в меню выбрали конкретный asm в tracer view?

а это ставит bp на не саму выбранную инструкция а на место как туда попадает

Изменено пользователем X86Jumps
Ссылка на комментарий

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

Вы сможете оставить комментарий после входа в



Войти
×
×
  • Создать...

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

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