Сейчас на форуме: vsv1 (+5 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Как подменить реализацию виртуального метода, без доступа к конструктору класса ! |
Посл.ответ | Сообщение |
|
Создано: 23 февраля 2016 22:43 · Личное сообщение · #1 Хочу понять возможно ли подменить данный метод, так чтобы оставался прямой доступ - к переменным как тут Code:
ScripText, Children доступны напрямую, без переопределения класса Ustruct. Если это возможно, то как следует представить функцию перехватчик чтобы в ней был тот самый доступ напрямую и без переопределения ? Я пытался представить эту функцию таким образом Code:
Code:
Но так программа падает с ошибкой. В самом классе есть так же несколько конструкторов Code:
Но я не очень понимаю - когда идет прямой доступ Code:
И как тогда следует правильно представить это ? ![]() |
|
Создано: 23 февраля 2016 22:50 · Личное сообщение · #2 |
|
Создано: 23 февраля 2016 22:57 · Личное сообщение · #3 reversecode пишет: скомпилируйте, и в визуал студии или ida посмотрите что там сгенерируется в asm коде может тогда поймете как сделать правильно Я знаю что там генерируется идой, я хочу понять - возможно ли подменить на свое имея почти полный сурс того же что и там! ScriptText выглядит там к примеру так v4 = sub_10101965(v2, (char *)v3 + 64); а это не очень. ![]() |
|
Создано: 23 февраля 2016 23:56 · Личное сообщение · #4 |
|
Создано: 24 февраля 2016 00:54 · Личное сообщение · #5 =TS= пишет: Непонятно зачем там передаётся edx и Ar. Если там действительно __fastcall, то третьим параметром портится стек. IDA из этого метода Code:
делает __thiscall, Code:
a3 это FArchive& Ar, который как раз и должен присутствовать в стеке, я сделал __fastcall потому что так удобнее, edx не нужный параметр просто. Но вопрос вообще в другом - если это возможно использовать описания класса внутри такой вот функции перехватчика, ![]() |
|
Создано: 24 февраля 2016 01:10 · Личное сообщение · #6 |
|
Создано: 24 февраля 2016 01:22 · Поправил: bolvai · Личное сообщение · #7 Я немного про другое спрашивал, если в моей функции перехватчике заместо - статичного обращения через "::" к переменным класса, будет обращение через указатель на объект ->, будет ли это равносильно или это не правильно ? Если будет, то как следует представить сам объект, используя конструктор либо как то по другому ? Должно же быть какое то распространенное решение подобных задач, не верю просто я что имея почти полное описание того же объекта, в итоге нельзя - подменить своим. ![]() |
|
Создано: 24 февраля 2016 01:37 · Личное сообщение · #8 если бы вы не строчили а делали то что вам говорят и вдумчиво смотрели да еще в оригинале и дебаггером побегали,то все бы поняли скопилить код в студии,далее начать отладку и включить показ asm кода пройтись и стало бы все ясно и понятно Code:
![]() |
|
Создано: 24 февраля 2016 01:59 · Поправил: bolvai · Личное сообщение · #9 Хотите сказать что я не правильно реализовал UField__Serialize; точнее его вызов ? Code:
P.S. Я и так дебагером пользуюсь практически постоянно от VS http://pastebin.com/25uF2EHF , просто это не как не помогает в понимании того что и как следует писать в C++, точнее возможно ли писать то что требуется. Добавлено спустя 42 минуты Я возможно дал вам не совсем полную инфу чтобы вы меня поняли, дополню ! Если я обозначу функцию перехватчик через статичное обращение "::" Code:
То мой хук попросту не будет иметь имени выражения чтобы заинжектится, как следует это решить ? Через #define, или может есть метод по проще ? плиз помогите. ![]() |
|
Создано: 24 февраля 2016 02:51 · Личное сообщение · #10 |
|
Создано: 24 февраля 2016 03:12 · Личное сообщение · #11 reversecode пишет: полнота информации граничит с нулем все вообще вырвано из контекста и подается какими то кусками несвязно, хрен что поймешь У меня есть весь класс UStruct цельный, то есть полный сурс, но я хочу перехватить оригинальный метод класса(UStruct::serialize), и подменить на свой, используя хук Trampoline Code:
Как следует объявить функцию перехватчик чтобы оставался доступ к членам класса, т.е ScriptText Children. Так яснее ? ![]() |
|
Создано: 24 февраля 2016 03:33 · Поправил: reversecode · Личное сообщение · #12 |
|
Создано: 24 февраля 2016 03:49 · Личное сообщение · #13 |
![]() |
eXeL@B —› Вопросы новичков —› Как подменить реализацию виртуального метода, без доступа к конструктору класса ! |