Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вставка ASM кода в MinGW 
V
    Опции темы
andrew_121
Дата 15.8.2009, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



zedx, В gcc так нельзя.
http://www.opennet.ru/docs/RUS/gas/

Добавлено через 6 минут и 32 секунды
так вот же!
Цитата(azesmcar @  13.6.2009,  15:47 Найти цитируемый пост)
http://www.ibiblio.org/gferg/ldp/GCC-Inlin...mbly-HOWTO.html 




--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
zedx
Дата 15.8.2009, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



Цитата
zedx, В gcc так нельзя.

Как так? Сделать процедуру полностью ассемблерной?
И кто такой gcc? 
PM MAIL   Вверх
andrew_121
Дата 15.8.2009, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Цитата(zedx @  15.8.2009,  16:38 Найти цитируемый пост)
И кто такой gcc?  

Ты запостил в тему про Mingw. Mingw - это GCC для виндавз.

Так под какой компилятор тебе нужно?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
zedx
Дата 15.8.2009, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



Цитата
Так под какой компилятор тебе нужно?

Borland C++ 6.0

PM MAIL   Вверх
GoldFinch
Дата 15.8.2009, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



для бормана отдельный раздел
а вообще пиши на msvc2008
PM MAIL ICQ   Вверх
andrew_121
Дата 15.8.2009, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Цитата(zedx @  15.8.2009,  17:30 Найти цитируемый пост)
Borland C++ 6.0

http://forum.vingrad.ru/forum/borland-c++builder.html


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
zedx
Дата 15.8.2009, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



А вообще, какая разница какой компилятор? Си он и в Африке Си.
Или как поставить вопрос: в каком сишном компиляторе возможно поключить процедуру на чистом асме и как это будет выглядить (код)?

Всего-то и надо - объяснить компилятору, что в стек ничего пихать не надо, за него уже всё сделано. В делфях это делалось записью assembler, а как это сделать в Си?  smile  
PM MAIL   Вверх
nerezus
Дата 15.8.2009, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: нет
Всего: 43



Цитата

А вообще, какая разница какой компилятор? Си он и в Африке Си.
 Перепиши на с асмовый код и вставляй "в африке с".



--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
GoldFinch
Дата 15.8.2009, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



zedx, в msvc это
Код

__declspec(naked)
T foo()
{__asm{

}}

__declspec(naked) убирает стандартные пролог и эпилог 
PM MAIL ICQ   Вверх
xvr
Дата 15.8.2009, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(zedx @ 15.8.2009,  18:14)
А вообще, какая разница какой компилятор? 

Получение функции БЕЗ стандартного стекового фрейма (и вообще без чего то) целиком зависит от используемого компилятора
Цитата

Си он и в Африке Си.
Си, который в Африке, не специфицирует как управлять компилятором.
Цитата

Или как поставить вопрос: в каком сишном компиляторе возможно поключить процедуру на чистом асме и как это будет выглядить (код)?

В MSVC и BCB 6.0 это __declspec( naked ) перед определение функции (см тут)
В gcc это #define + asm

PM MAIL   Вверх
andrew_121
Дата 15.8.2009, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Цитата(zedx @  15.8.2009,  18:14 Найти цитируемый пост)
А вообще, какая разница какой компилятор? Си он и в Африке Си.

Про Си вопроса не было! Ты хочешь вставлять ассемблерный код, а это другое!


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
zedx
Дата 15.8.2009, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



Цитата(xvr @  15.8.2009,  18:37 Найти цитируемый пост)
В MSVC и BCB 6.0 это __declspec( naked ) перед определение функции (см тут)

Во! Именно это мне и было нужно. Спасибо. smile
PM MAIL   Вверх
DiGGeRR
Дата 15.8.2009, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 10.5.2009

Репутация: нет
Всего: нет



Цитата
В MSVC и BCB 6.0 это __declspec( naked ) перед определение функции (см тут)
В gcc это #define + asm


а как же __attribute__((naked))?
PM MAIL   Вверх
zedx
Дата 23.3.2010, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



Простите, что не по теме, но продолжу уже здесь.

Цитата(xvr @  15.8.2009,  18:37 Найти цитируемый пост)
В gcc это #define + asm

Понадобилось мне тот же код перенести и в Linux (компилятор gcc 4.4.1).

Правильно ли я сделал объявление и вызов процедуры sub_proc_1:

Код
#define sub_proc_1()
    asm volatile (    
    "movl    8(%esp),%ecx;"
    "movl    4(%esp),%edx;"
    "subl    $0x88,%esp;"
    "leal    0x88-0x44(%esp),%eax;"
    "pushl    %eax;"
    "pushl    %ecx;"
    "pushl    %edx;"
    "call    sub_proc_2;"
    "addl    $0x98,%esp;"
    "ret"    
    );

void fn(unsigned char* dString, unsigned char* CRC, int StringSize)
{
  asm volatile (    "movl    $CRC,%eax;"
        "pushl    %EAX;"
        "movl    $StringSize,%eax;"
        "pushl    %EAX;"
        "movl    $dString,%eax;"
        "pushl    %EAX;"
        "call    sub_proc_1;"
        "addl    $0x0C,%esp" );
}


Просто, пришлось переводить ассемблер из Intel в AT&T и ещё не до конца перевёл и работоспособность проверить не могу, а компилятор вообще никак не возражает даже на отсутствие sub_proc_1, хотя в коде есть call sub_proc_1.



Это сообщение отредактировал(а) zedx - 23.3.2010, 00:07
PM MAIL   Вверх
xvr
Дата 23.3.2010, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата

Правильно ли я сделал объявление и вызов процедуры sub_proc_1:
Нет. Это получился голый define (без тела) и отдельно стоящий asm (уж не знаю как gcc это трактовал)
Под define+asm я имел в виду inline вставку asm в место вызова, а не стандартный call. Для нормальной процедуры надо использовать функцию с атрибутом __attribute__((naked)) (как DiGGeRR сказал) и asm вставку внутри нее

Цитата

а компилятор вообще никак не возражает даже на отсутствие sub_proc_1, хотя в коде есть call sub_proc_1.
На это будет возражать линкер

PM MAIL   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0595 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.