· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.ASSEMBLER —› ООП. Функция-член на АСМ.

<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . >>

Посл.отвђт Сообщенiе


Дата: Сен 26, 2003 08:21:40

Интересует как я уже говорил замена ЧЛЕНА ФУНКЦИИ написанной на С на Член функцию написанную на АСМе. Не понятно как получить доступ к переменным класса!!! PRIVATE!!


Дата: Сен 26, 2003 13:24:52

emergenter
Ааа, отгадка.

1. Пишешь на С++ метод, который читает этот PRIVETA
Смотрешиь это в отладчике..
И пишешь свою такую же..
Попробуй ?:)))
Удовольствия получишь :)))

P.S
А я от LIBC капаю :)))


Дата: Сен 26, 2003 14:31:44

Black_mirror
Как ты такой код получил??


Дата: Сен 26, 2003 15:13:16

Edmond
Ты меня не понял!! Я хотел узнать!! Как сделать привязку на асме функцииЧЛЕН к классу. Т.е.
Есть класс
class myclass{
public:
void SetValue(int i, int j);

private:
i
j
}
Я напишу функцию на асме (к примеру setValue)!! А как потом ее привязать к классу??? Чтобы она была Частью класса!! Т.е. вот такое определение на С:
void myclass::setValue(int i, int j)
{
.............
}


Дата: Сен 26, 2003 15:58:14

emergenter
Я тебе ответил.

1. Написать бованку на С++
(то есть эту функцию как член класса)
2. Посмотреть код, и сделать всё как С++
то есть дать её нужное имя, и так далее.

Что не ясно?


Дата: Сен 26, 2003 16:06:18

Так а как втавить и куда это все??


Дата: Сен 26, 2003 16:34:48

emergenter
Если хочешь написать метод класса на ассемблере, то придется довольствоваться ассемблером встроенным в VC. Также есть вариант написать весь класс на ассемблере. Кроме того можно объявить внутри класса экземпляр статического класса, конструктор которого пропатчит наш метод на асме и добавит его в таблицу виртуальных функций. Или затрет им метод написанный на Си. Других вариантов я не вижу. Из-за подобных проблем я давно пришел к выводу, что проще программу целиком написать на ассемблере, чем бодаться с VC.


Дата: Сен 26, 2003 16:36:45

emergenter
Так а как втавить и куда это все??

Это что значит?
КУДА ВСТАВИТЬ????

В OBJ файл!!!!
А куда ещё?

EXTERNDEF твоя функция...

А в С++ только интерфейс определить.

И всё.

Делаешь свой модуль на асме. Компилируешь его.
Объявояешь имя функции внешним

EXTERNDEF Name:near

И потом добавляешь obj к проекту на С++
(А я даже просто asm добавляю.)


Дата: Сен 26, 2003 16:57:03

Edmond
Я так и делаю! Класс полностью на С!!! А вот с МЕТОДОМ уже мучаюсь...
а как же привязка к классу на С++ ФУНКЦИИ к КЛАССУ ::
My_class::EXTERNDEF ()
Куда ее деть???
или ты думаешь что будет и так работать???


Дата: Сен 26, 2003 17:05:02

Black_mirror
ЕСЛИ Я ПЕРЕПИШУ ВЕСЬ КЛАСС на Ассемблере из-за одного МЕТОДА то прикинь что станет с другими методами, которые написаны на С!! Или их можно подключить к Ассемблерному классу?тогда вопрос КАК???


Дата: Сен 26, 2003 17:08:54

Кстати:
:: - этот знак ввели на случай если МЕТОДЫ разных классов будут иметь одинаковые имена, а как раз вот этот знак привязывает данный метод к своему классу... (Это из истории С++)


Дата: Сен 26, 2003 17:15:32

emergenter
Эххх, вы просто ИСПОЛНЯЕТЕ %)))) мой дорогой друг.
ЧИТАЕТЕ СТАТЬЮ НА ASSEMBLER.RU про то, как АСМ в VS всовывать.

CustomBuild (контекстное меню в дереве проекта над файлом asm)

Делаете так

ml.exe /c /coff /nologo /I$(ProjDir) /Fo"$(OutDir)/" /Zi /DDEBUG $(InputPath)

И в поле ниже

$(OutDir)\$(InputName).obj

Объявляете в ASM модуле
==================================

EXTERNDEF FunName:near

FunName proc
        endp

=================================


Что ещё вопросы есть?


Дата: Сен 26, 2003 17:25:19

Edmond
Так при чем тут как всунуть!!?? Как всунуть я разберусь!!! Тут вопрос ЧТО ВСОВЫВАТЬ!!!!????
и откуда всовывать??? Но мне кажется что просто так не всунешь....


Дата: Сен 26, 2003 17:28:59

Edmond
Ну смотрите сюда на пример:
class My_class{
public:
void SetValue(int, int);
...
private:
int i;
int j;
int z;
};

void My_class:: SetValue(int p1, int p2){
i=pr1;
j=pr2;
z=i+j;
}

И что Вы тут будете всовывать???? И как самое главное!!


Дата: Сен 26, 2003 18:09:24

	MyClass MyObj;

	MyObj.SetValue(0xf,0x1);

31:       MyObj.SetValue(0xf,0x1);
00401090   push        1
00401092   push        0Fh
00401094   lea         ecx,[ebp-30h]
00401097   call        @ILT+0(MyClass::SetValue) ;; THIS(00401005)
32:


;; ecx = THIS
004017EA   mov         dword ptr [ebp-4],ecx
23:   i=p1;
004017ED   mov         eax,dword ptr [ebp-4]
004017F0   mov         ecx,dword ptr [ebp+8]


=============================

Кусок OBJ файла

?SetValue@MyClass@@QAEXHH@Z

Вопросы???

Тебе сложно написать подобное на ASM?

<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.039