DrawString есть методом класса FCanvasUtil
для его вызова нужно или найти указатель на уже готовый объект класса FCanvasUtil или создать свой (как работает клиент в этом отношении точно не скажу)
во 2-м случаем можно найти экспортируемый конструктор для FCanvasUtil и создать его. Далее при вызове после передачи параметров методу в ecx нужно вставить адресс обьекта класса FCanvasUtil (это проблема перехода из thiscall)
function foo(obj:TObj , arg1:T1, arg2:T2);stdcall; asm pop eax //адрес возврата, временно сохраняем в eax pop ecx //аргумент obj, записываем в ecx как того требует __thiscall push eax //записываем сохраненный адрес возврата jmp [foo] //вызываем метод end;
Последний раз редактировалось ALF, 19.09.2010 в 00:32.
Причина: Добавлено сообщение
первый метод который описал морфик проще. Хукаеш любой метод этого обьекта сохраняеш содержимое есх. И пользуеш его в своих методах если отсуствие синхронизации не повлечёт проблем.
Я вообще хукаю endscene на уровне директх и рисую че хочу
DrawString есть методом класса FCanvasUtil
для его вызова нужно или найти указатель на уже готовый объект класса FCanvasUtil или создать свой (как работает клиент в этом отношении точно не скажу)
во 2-м случаем можно найти экспортируемый конструктор для FCanvasUtil и создать его. Далее при вызове после передачи параметров методу в ecx нужно вставить адресс обьекта класса FCanvasUtil (это проблема перехода из thiscall)
где PFCanvasUtil и будет указателем на обьект класса FCanvasUtil
а можно чуть по подробнее о конструкторе и что должно быть там где три точки у Вас в кода...
И если не сложно можете объяснить эту методику?
На сколько я понял мы кидаем в стек 0ffffff
потом три точки О_о (хз что там за код должен быть)
потом в стек по идеи число 100 но зачем О_о?
а регистр есх помещаем адрес памяти к функциии..
Короче что-то я туплю... О_о
Можно описать по подробнее...?
Последний раз редактировалось ALF, 25.09.2010 в 15:30.
или чего? О_о
У меня есть полностью от "Декомпилированый" engine.dll прогой IDA pro (думаю знаете). но все равно туплю)
в пушом параметров - понял)))
но в регистр ecx - хз О_о
Пробовал без него - клиент запустился, на екране пусто)
Добавлено через 21 час 47 минут
потупил я потупил и пришла в голову мысль в еах засунуть адрес
PHP код:
FCanvasUtil::~FCanvasUtil
Только какой именно? тот что получают методом GetProcAddress? или туда надо оригинальный RVA?
Последний раз редактировалось ALF, 27.09.2010 в 22:52.
Причина: Добавлено сообщение
в ecx нам надо указать не адрес функции (вообще твоя функция DrawString это метод класса FCanvasUtil - ты знаеш что такое классы и наф они нужны? ) а адресс обьекта класса
Вообщем рекомендую тебе забить на это... и использовать как mira рисование в endscene DirectX http://tracker2k.kiev.ua/5.html