Помогите перевести с++ в asm

Тема в разделе "LANGS.C", создана пользователем Glist, 24 окт 2008.

  1. Glist

    Glist New Member

    Публикаций:
    0
    Регистрация:
    25 сен 2008
    Сообщения:
    5
    Всем здрасьте!
    Неподскажете ли, как вот это:
    ----------------------------------------------(Это из SDK для написания плагинов к 3DMAX, файл inode.h)
    class INode: public ReferenceTarget, public FPMixinInterface {
    public:
    // Prevents methods not overriden by this class to be hidden by the overriden version
    // Warning: the names it declares take on the access rights of the
    // section where the using statement is placed
    using ReferenceTarget::GetInterface;

    // If this was a temporary INode (like an INodeTransformed) this will delete it.
    virtual void DisposeTemporary() {}

    // In the case of INodeTransformed, this gets a pointer to the real node.
    virtual INode *GetActualINode() {return this;}

    virtual TCHAR* GetName()=0;
    virtual void SetName(TCHAR *s)=0;


    // .... и еще боле сотни функций


    };
    ------------------------------------------------

    Как сие выглядило бы в бинарном (ассемблерном) виде?
    Все пимеры в документациях (MSDN,различные SDK) на С++ . А я этого языка просто непонимаю.

    Допустим мне нужно вызвать функцию virtual void SetName(TCHAR *s)=0, я получил указатель на класс(интерфейс) INode
    пусть он будет в переменной [@inode]

    данную функцию я вызываю так:

    mov eax,[@inode]
    mov eax,[eax]
    call [eax+12],offset newname

    Но почему-то нифига неполучается, я вызываю совсем не то что надо.Причем с другими классами все получалось правильно.

    И как мне в Visual studio net (2003) откомпилить минимально примеры из различных SDK, и где указывать пути к SDK?
    Мне ненужно получать работоспособное приложение , а только лишь смотреть полученный код, Или проще говоря переделать

    сишные *.h файлы в ассемблерные *.INC . Или может есть другие более простые способы для этих целей?
     
  2. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Ну как минимум компиляция с -Zi и просмотр во встроеном дебуггере.
     
  3. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Вообще, обычно пользуются специальными тулзами для дампа объектников.
    Например, objdump в GCC или wdis в Watcom. Старый Borland C++ 3.1 тоже мог генерировать asm-файлы при компиляции.
     
  4. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    У тебя и не получится, потому что для вызова виртуальных методов нужно прочитать адрес функции из таблицы виртуальных функций. Обычно адрес таблицы виртуальных функций хранится по нулевому смещению относительно начала объекта.
     
  5. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
  6. Glist

    Glist New Member

    Публикаций:
    0
    Регистрация:
    25 сен 2008
    Сообщения:
    5
    SadKo , а неможноль немного поподробнее?
    Вот дпустим получил указатель на INode а дальше как? Он же наверное и есть адрес таблици функций, или я совсем ничего непонимаю :dntknw: .?