Сейчас на форуме: asfa, bartolomeo (+7 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› C++ аргумент в ecx |
Посл.ответ | Сообщение |
|
Создано: 29 октября 2011 15:56 · Личное сообщение · #1 Дизасмнул длл-ку написаную на с++. Пытаюсь разобраться что к чему, но мешает небольшая непонятка - в функции обыно передаются несколько аргументов и один из них регистром (есх), ида в некоторых вариантах подписала его как this, сразу вспомнилось что в с++ есть "конвенсия" вызова thiscall. Интересно стало что именно передается этим аргументом, мб это указатель на саму "структуру", описатель класса?? ![]() |
|
Создано: 29 октября 2011 16:14 · Личное сообщение · #2 |
|
Создано: 29 октября 2011 16:23 · Личное сообщение · #3 |
|
Создано: 29 октября 2011 17:08 · Поправил: ASMatic · Личное сообщение · #4 еще вопосец возник, а можно както заюзать класс из сторонней длл, т.е. сделать new ток на сишке) если конкретней, есть дл, в ней есть класс который делает нужную мне работу. Думал найти его (указатель на функи) и заюзать, но этот есх не дает. Собственно вообще не могу найти где в коде делается new для этого класса( *может класс унаследован и потому нету оператора new для этого класса в поиске иды? Как тогда в таком случае можно поискать кто унаследовал? **еще было бы хорошо подсказать чот по поводу конструктора класса, как его можно узнать среди остального кода? ![]() |
|
Создано: 29 октября 2011 18:03 · Личное сообщение · #5 ASMatic я делаю так - ищу VMT класса, потом все xrefs на VMT, потом перебираю все по одной и анализирую код. Конструктор видно на глаз - инициализация мемберов, зануление и т.д ![]() |
|
Создано: 29 октября 2011 18:25 · Поправил: OKOB · Личное сообщение · #6 ASMatic пишет: не могу найти где в коде делается new для этого класса А кто сказал, что объект класса создается динамически. Если глобальный статический объект, то в сегменте памяти, если локальный статический, то в стеке место отводится и в конструктор передастся через ECX соответствующий адрес для инициализации объекта. Вот в параллельной ветке http://exelab.ru/f/action=vthread&forum=5&topic=19180 - явно глобальный статический объект - mov ecx, offset _object если локальный статический, то - lea ecx, [esp+XXXh] если динамический, то - mov ecx, eax (вблизи new) или mov eax, [esp+XXXh] (если выделение памяти было чуть выше по коду) ----- 127.0.0.1, sweet 127.0.0.1 ![]() |
|
Создано: 30 октября 2011 14:47 · Поправил: ASMatic · Личное сообщение · #7 |
|
Создано: 17 февраля 2012 21:32 · Личное сообщение · #8 <<может класс унаследован и потому нету оператора new для этого класса Сивый бред, сами то хоть понимаете, что несёте ![]() ![]() |
|
Создано: 17 февраля 2012 21:41 · Поправил: Hexxx · Личное сообщение · #9 TheNozza пишет: Если вы знакомы с плюсами, то должны представлять себе такие элементарные понятия, как "Виртуальный конструктор", "Фабричная функция" Ага в разделе "для новичков" ![]() ![]() TheNozza пишет: Сивый бред, сами то хоть понимаете, что несёте На самом деле не бред. Может быть класс, экземпляр которого в коде программы не создается, поэтому нет для него new. Вариант про создание в стеке уже описал OKOB, не рассматриваем. Так вот сам по себе он не создается, но является членом другого класса (агрегация). Или просто обычное наследование. Тогда new будет вызвано для потомка, а для предка просто конструктор. Если человек смотрит на конструктор предка, то он не увидит рядом new. ----- Реверсивная инженерия - написание кода идентичного натуральному ![]() |
|
Создано: 17 февраля 2012 22:05 · Личное сообщение · #10 Просто поправка: Экземпляр - Instance (Инстанс), этот термин предпочтительнее. <<Так вот сам по себе он не создается, но является членом другого класса (агрегация). Если объект класса является членом другого класса, то это композиция, а не агрегация, т.к. в этом случае время жизни обоих объектов будет одинаково и один не сможет существовать без другого - не говори о том чего не знаешь, почитай об иерархиях part-of. <<класс экземпляр, которого в коде программы не создается Чтобы заюзать фичи такого класса (а это единственная цель по которой новой класс проектируется и реализуется), у него интерфейсные методы должны быть статическими. <<Так вот сам по себе он не создается, но является членом другого класса Бред такое не возможно. Членами классов могут являться Instance других классов, но не сами классы, т.к. класс - это тип. ![]() |
|
Создано: 17 февраля 2012 22:21 · Личное сообщение · #11 <<Тогда new будет вызвано для потомка, а для предка просто конструктор. Что за термины потомок, предок? В школе что ли? Подкласс и суперкласс для серьёзных или по проще производный, базовый для студентов. Ты опять бредишь... Если через new создаётся объект производного класса, то ты считаешь, что new вызовет конструктор лишь для базового класса и все поля у объекта производного класса останутся непроинициализированными??? в связи с тем, что new забыл вызвать для него конструктор? ![]() |
|
Создано: 17 февраля 2012 23:09 · Личное сообщение · #12 Hexxx <<И кстати для программирования на плюсах не обязательно знать вот эти элементарные понятия Можно разделить программирование на плюсах на две категории: 1) Любительское (С++ - хобби для души) - ответ: необязательно, т.к. эти вещи довольно глубокие 2) Профессиональное (источник доходов) - ответ: Обязательно Если хотите отличить профессионала от любителя (например среди знакомых, друзей), то задайте один вопрос: "Что такое виртуальный деструктор?" Любитель об этом навряд ли слышал, т.к. в книгах по си++ маловероятно, что он это найдёт. Профессионал, ответит сразу, т.к. не один класс, выступающий в роли базового не пройдёт CODE REVIEW, в том случае, если он не имеет виртуального деструктора. Такова жизнь. Всё просто друзья! ![]() |
|
Создано: 17 февраля 2012 23:19 · Личное сообщение · #13 |
|
Создано: 18 февраля 2012 01:41 · Поправил: TheNozza · Личное сообщение · #14 Archer <<Это форум не для профессиональных кодеров на плюсах в любом случае. Не корректно разрабов кодерами обзывать, т.к. задачи у них различные: 1) Проектирование - то бишь разработка UML Class Diagram, UML Sequence Diagram это по Вашему кодинг? 2)Unit testing, выполняющееся разработчиком после прохождения ревизии кода это тоже кодинг? Да, Вы батенька просто слабо представляете процесс разработки ПО! ![]() |
|
Создано: 18 февраля 2012 02:15 · Личное сообщение · #15 |
|
Создано: 18 февраля 2012 08:59 · Личное сообщение · #16 |
|
Создано: 18 февраля 2012 09:43 · Личное сообщение · #17 |
![]() |
eXeL@B —› Вопросы новичков —› C++ аргумент в ecx |
Эта тема закрыта. Ответы больше не принимаются. |