![]() |
|
Модераторы: bsa |
![]()
|
|
| GoldFinch |
|
||||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
это баг или "фича"? о_О |
||||
|
|||||
| Kallikanzarid |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 240 Регистрация: 9.11.2008 Репутация: 2 Всего: 3 |
||||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
Kallikanzarid, фрейма нету, какбэ
читай код в 1м посте полностью |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 2 Всего: 207 |
GoldFinch,
хм, реально баг получается -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Kallikanzarid |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 240 Регистрация: 9.11.2008 Репутация: 2 Всего: 3 |
Точно, должно быть esp
Попробуй поставить сервис пак, может, поможет. |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
все верно
в прологе esp сохраняется в ebp, и от ebp считаются аргументы так что все правильно неправильно в naked использовать аргумент - т.к. компайлер плюет, что вы отказались от пролога и эпилога |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 3 Всего: 158 |
хм. здесь про аргументы ничего такого не сказано, однако упомянуто авто-отключение Frame pointer optimization для naked функций. т.е. компилер рассчитывает на то, что руками фрэйм таки будет создан, что он и демонстрирует.
|
|||
|
||||
| Kallikanzarid |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 240 Регистрация: 9.11.2008 Репутация: 2 Всего: 3 |
GoldFinch, Если нет желания использовать фрейм, попробуй __fastcall. ЕМНИП, два двойных слова ты с его помощью без проблем передашь даже без фрейма. В принципе можно одним из них передавать указатель на объект, в котором хранятся остальные параметры.
Это сообщение отредактировал(а) Kallikanzarid - 7.12.2008, 08:54 |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
ну прям лень фрейм выставить - 2 инструкции в начале и 2 в конце
|
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
Kallikanzarid, в msdn сказано что при __fastcall компилятор не гарантирует очередность параметров, т.е. неизвестно какой окажется в eax а какой edx. Кроме того, в большинстве случаев аргументы лежат в стеке.
J0ker, я привык к тому что когда я пишу на асме, я пишу как я хочу, а не так как того хочет конпилятор. может у меня ограничения на длину кода, мне тогда этот фрейм впихнуть некуда, более того, он в ряде случаев просто не нужен. |
|||
|
||||
| Kallikanzarid |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 240 Регистрация: 9.11.2008 Репутация: 2 Всего: 3 |
GoldFinch, Если бы ты писал под мобильники, то юзал бы явно не студию. Уменьшение размера кода даже на килобайт абсолютно незаметно. Теоретик, блин
ЗЫ: Зачем тебе нужны naked функции? Кстати, если тебе так противен фрейм, можешь спокойно высчитывать расположение параметров сам. Это сообщение отредактировал(а) Kallikanzarid - 7.12.2008, 14:28 |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
Kallikanzarid, если бы ты писал на асме, ты бы знал зачем надо уменьшать код, зачем нужны naked функции
высчитывать расположение параметров самому глупо, этим должен заниматься компилятор, тем более что это асм встроенный в ЯВУ |
|||
|
||||
| Kallikanzarid |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 240 Регистрация: 9.11.2008 Репутация: 2 Всего: 3 |
О да, я такой глупый, просто оторопь берет! Ты хоть профилировщик запускал прежде, чем прибегать к таким мерам? Или тебе 4мб L2-кэша заранее мало?
Писать пролог самому глупо, этим должен заниматься компилятор. ЗЫ:
А тебе зачем это знать? Обращайся к параметрам по имени. |
||||||
|
|||||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
Kallikanzarid, вот есть у меня например такой код:
куда здесь воткнуть ebp фреймы? |
|||
|
||||
| Kallikanzarid |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 240 Регистрация: 9.11.2008 Репутация: 2 Всего: 3 |
Боюсь даже представить
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |