![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| ParaPik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 8.1.2009 Репутация: нет Всего: нет |
Есть код:
Не могу разобраться, почему возникает эта ошибка. В файле, который считывает функция, содержит откомпилированную инструкцию RET(для пробы), т.е. 1 байт. Помогите понять, в чем дело. |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
В x86 не всякие данные можно исполнить. То, что исполняется должно быть помещено в исполняемый сегмент.
Смотри DEP |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
хорошим прявилом программирования является не использование asm вставок
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| ParaPik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 8.1.2009 Репутация: нет Всего: нет |
А есть какой-нибудь другой способ запустить на исполнение код из файла? При компиляции в Visual Studio этот код не хочет работать, но если откомпилировать в C++Builder, то все нормально.(когда-то давно это делал, а сейчас только решил использовать этот код) Не хочется ради одной функции ставить другую IDE.
Далеко не во всех случаях. Простой пример: перевести число в строку в двоичном виде. Код, решающий эту проблему и написанный самостоятельно на asm, будет в разы быстрее нежели аналог, например, на C. |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 6 Всего: 135 |
ОМГ, ещё один "мистер быстрее компилятора"... Представить доказательство, что код на Си++ (на MSVC 2010, например) медленнее твоего велосипеда - религия не позволяет ? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| ParaPik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 8.1.2009 Репутация: нет Всего: нет |
А я разве могу, используя средства C++, узнать напрямую состояние флага CF? Это процедура перевода будет использовать только команды shr и jc. Используя C++, максимум, что я смогу использовать, это инструкцию div, которая медленнее shr. Первый вариант будет быстрее.
Вот на asm:
Вариант на C++ будет длиннее. |
|||
|
||||
| borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 6 Всего: 135 |
ParaPik, не знание (твоё) Си++ не освобождает от ответственности...
а теперь давай спорить на пиво, что твой вариант медленнее этого, скомпилированного последней версией gcc или MSVC 2010 с опцией /O2 можно непонятнее, но ещё короче и, наверное, быстрее
Это сообщение отредактировал(а) borisbn - 17.4.2011, 14:39 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
| ParaPik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 8.1.2009 Репутация: нет Всего: нет |
1) Я схватил первый попавшийся пример(алгоритм его решения на C++ был не самый лучший).
2) Рассмотрел его с отключенной оптимизацией. Ясен пень, что с включенной оптимизацией компилятор всегда заметит то, чего не смог заметить человек. 3)
Не утверждай того, чего не знаешь. И пробуй иногда для себя отдираться от сторонних оптимизаторов. 4) Не спорю, в моем варианте тоже есть моменты, которые можно оптимизировать. 5) И у кого-то проблемы с восприятием текста. Какая проблема рассматривается в теме? Единственный, кто ответил, в чем проблема, был xvr. Жаль, что он не предложил альтернативный вариант решения. Остальная болтовня о том, нужны ли asm вставки или нет, вообще, честно говоря, не относится к теме. Поэтому если есть проблемы с восприятием текста или нет дельного совета, просьба - НЕ ЗАСОРЯТЬ тему. Это сообщение отредактировал(а) ParaPik - 17.4.2011, 18:42 |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 6 Всего: 135 |
просто делаю выводы. из этого
я, какбэ, сам знаю, что мне пробовать, а что нет. по теме: см. функцию VirtualProtect с третьим параметром PAGE_EXECUTE_READWRITE -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| ParaPik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 8.1.2009 Репутация: нет Всего: нет |
А вот теперь спасибо. Все работает.
Это сообщение отредактировал(а) ParaPik - 17.4.2011, 19:35 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
С VirtualProtect вы уже сами разобрались, а по поводу asm вставки - она тут лишняя
|
|||
|
||||
| ParaPik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 8.1.2009 Репутация: нет Всего: нет |
Спасибо за ответ, xvr. Я знаю, что есть аналог asm-вставки на C, который вы и предложили. Здесь оно, все равно, непринципиально.
Поправьте меня, если я немного не так понял, xvr: вы придрались к asm-вставке, потому что код не должен быть привязан к командам конкретной машины(т.е. чтобы код был привязан только к C++ компилятору)? |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
К asm вставке прелирался не я, а Dem_max. Но в общем и целом я с ним согласен - asm вставка оправданна только тогда, когда ее действие нельзя выполнить эквивалентным по объему С/С++ кодом. Это может быть и доступ к недоступным с С уровня регистрам, и оптимизация по скорости критичных участков программы, но явно не банальный вызов процедуры по указателю. Язык С предоставляет такой сервис штатно |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 3 Всего: 14 |
а вы листинг асмовский ее видели? -------------------- |
|||
|
||||
| borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 6 Всего: 135 |
500mhz,
и что ? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
| ParaPik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 8.1.2009 Репутация: нет Всего: нет |
xvr, я все-таки заменил asm вариант на стандартный сишный. Я соглашусь, что оно здесь не нужно. Ну, если только для красоты оставить...
Это сообщение отредактировал(а) ParaPik - 18.4.2011, 14:05 |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |