|
|
| Посл.отвђт | Сообщен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:24MyClass 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? |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.039 |