![]() |
|
Модераторы: bsa Страницы: (9) Все « Первая ... 2 3 [4] 5 6 ... Последняя »
( Перейти к первому непрочитанному сообщению ) |
![]()
|
|
| Logo |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 1 Всего: 10 |
Ну, если присмотрется чуточку повнимательнее, видно, что ориентирована именно относительно значений регистров ;)
Аргументы впринципе нет нужды передавать в метод, в данном компиляторе можно как то так:
+ добавляем число DWORD'ов снизу структуры, не являющихся переменными (NOTVARS). А вот про регистры забыли. тогда "20" здесь
Вобщем код как-то все больше походит на "оригинал" |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
это да, сорри.. внимательно не приглядывался.. глаз увидел взятие адреса с регистров, остальное додумал Добавлено через 5 минут и 10 секунд за теми тремя исключениями с которых и начали.. 1. нет перегрузки оператора new 2. нет жесткой связки локальных переменных с "координатами" их расположения в стеке 3. нет таинственного определения метода run.. Добавлено через 6 минут и 46 секунд естесственно стек можно отразить на структуру с любым смещением, если рассположение элементов фиксированно.. Добавлено через 7 минут и 26 секунд в смысле забыли, когда они идут основным аргументом ? Добавлено через 9 минут и 21 секунду или про то чтоб их тоже отразить в структуру ? это добавит неповоротливости, так как они соотносятся к срезу, а не к локальным переменым... |
|||
|
||||
| Logo |
|
||||||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 1 Всего: 10 |
Ну так они же и есть "жестко" связанные, относительно EBP.
Там метод называется some_mfn
Ну так относительно EBP оно же всегда фиксированно
Не обрабатываются. Или просто это подразумевалось, что если нам нужны регистры, заменяем
? Это сообщение отредактировал(а) Logo - 21.3.2012, 16:20 |
||||||||||||||
|
|||||||||||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
нет.. в одном стеке можете расположить хоть десять структур / объектов... библиотечную функцию среза вам надо все равно писать, больше ничего лишнего связка стека не прямо и фиксировано отражена на структуру, а разделена на две части : на описание структур, и их получение.. только вот run во первых таинственен, во вторых один, а в третих с фиксированной сигнатурой.. и где ж свобода действий ?!
ага ... в функции стыка, мы имеем и регистры и нужные переменные, а дальше передаем что, куда и как нужно и хочется .. Добавлено через 6 минут и 55 секунд эту бы математику желательно тоже абстрагировать.. Это сообщение отредактировал(а) mes - 21.3.2012, 17:38 |
|||
|
||||
| Logo |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 1 Всего: 10 |
Ну, для одного конктретного "блока кода", и даже для одной функции, структура локальных переменных/аргументов впринципе фиксированна.
Просто нет необходимости вставлять больше одного "блока кода" в одно конкретное место
В "оригинале" вынесена в шаблон |
||||||
|
|||||||
| mes |
|
||||||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
если в блоке кода всего один лонг, то не зачем создавать структуру.. или несколько лонгов на большом или не фиксированом расстоянии друг от друга.. Добавлено @ 18:08
результирующая функция может быть довольно объемной и желание разбить ее на части будет вполне естественным.. точно так же как не вижу причин, применения разных действий к одному набору.. например несколько срезов в одной и той же функции.. абстрагирована и вынесена разные понятия.. первое дает свободу действий, а второе лишь прячет проблему.. например это я заменил бы
на что то типа :
тогда для функции с несколькими аргументами может выглядить, как
которая вернет ссылку на кортеж из нескольких элементов.. правда auto есть только в C++11.. ну а так надо знать побольше об области применения, чтоб подобрать правильную модель конструкции, которой было бы легко пользоваться не ограничивая себя при этом.. Это сообщение отредактировал(а) mes - 21.3.2012, 18:24 |
||||||||||
|
|||||||||||
| Logo |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 1 Всего: 10 |
Имел ввиду имено место, в которое вставляется блок (то есть заменяем блок кода в исходной программе на свой). В одной функции, конечно может быть несколько целевых блоков.
На не фиксированом растоянии, такого не бывает, а если растояние большое, в структуре это можно задать так
Это сообщение отредактировал(а) Logo - 21.3.2012, 19:02 |
||||||||
|
|||||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
а как же та ситуация с алокацией памяти ? оно то можно.. но зачем ? в общем на данный момент обсуждение превращается в простой спор.. для дальнейшего развития нужна информация, и в частности ситуации,на примере которых можно было бы допилить под нужды.. в любом случае я надеюсь Вы согласны, что в сравнение с перегруженым new тот же addr_as или же как его следущий шаг stack_args/_vars более наглядны и свободны... Так что по сути первоначальная тема исчерпана... Но с удовольствием продолжил бы, при наличии с вашей стороны интереса по развитию функционала |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
пресмотрев последние посты, хочу уточнить, я не против структуры как описания блока..
я против тех способов перечисленных выше... и кажется я понял, в чем состояла ваша задача, сейчас попробую выправить ваш оригина кстати как называется та часть стека, которая находится между переменными и аргументами ? |
|||
|
||||
| Logo |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 1 Всего: 10 |
Не нагляднее ли в этом случае в самой функции вызвать еще несколько функций, разбив таким образом. Ведь фактически код функции = коду блока в исходной программе, который мы дополняем/заменяем (или просто переписываем на C++
В этом случае локальные переменные все равно фиксированны, и лежат внизу, а память выделяется выше. Если же понадобится с этой памятью работать, то указатель на нее все равно где-то лежит (очевидно, он должен быть в локальной переменной), в примере он хранится в локальной переменной memory.
Ну как посмотреть... с одной стороны, человеку, особенно не очень знакомому с C++, функция addr_as, понятнее, потому что в ее названии отражено, что она делает. С другой стороны оператор "placement new" (new(...) Type), для того в C++ и предназначен, по смыслу он и есть "addres(или аргумент(ы) относительно которых вычисляется адрес) as". То есть это переписывание встроенного оператора C++. Свободнее, да, можно применять к простым типам, можно, как я понял, обьеденить несколько типов (<long, double, Class&>) хотя я и пока не знаю, не искал, как это сделать. Еще, об абстракции, вроде new(Regs) Class, или addr_as<Class>(Regs). И то, и другое, будет брать информацию (Регистр (EBP или ESP), смещение) из класса (?). Когда инфу из класса берет его член, это нормально, а когда некая внешняя функция, мне думается, это уже не так хорошо.
Ну да, местами есть Это сообщение отредактировал(а) Logo - 21.3.2012, 20:43 |
||||||||
|
|||||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
не совсем.. объснять долго.. покажу примером чуть позже.. Добавлено через 2 минуты и 42 секунды
хорошо все то, что не заставляет напрягаться.. |
|||
|
||||
| Logo |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 1 Всего: 10 |
Там находятся.
Это сообщение отредактировал(а) Logo - 21.3.2012, 20:38 |
||||
|
|||||
| Logo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 1 Всего: 10 |
В случае GCC 4 на liveworkspace.org, он возможно, еще может добавлять туда пустое место, для выравнивания, трудно сказать точно, код не посмотришь просто так, но зачем то он выделяет еще место.
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Logo, я так понимаю для каждого блока опредлен жесто тип адрессации ? и не нужен один и тот же блок с разной адрессацией ?
|
|||
|
||||
| Logo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 1 Всего: 10 |
Я бы даже сказал, для одной функции жестко определен тип адресации (локальные переменные и аргументы). В которой может быть несколько блоков.
Смещение (SHIFT) определено в блоке, так гибче. Регистр относительно которого вычисляется адрес структуры, в "оригинале" тоже определен в блоке, хотя впринципе для одной функции он один. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |