Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
karaulov2
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 59
#1

gcc в c++ VS - C++

01.03.2013, 19:19. Просмотров 975. Ответов 19
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
void MakeStrRef(RCString* sref,char* data){
    asm("pushl %%eax\n"
        "call %%edx"
        :
        :"a"(data),"c"(sref),"d"(GameBase+0x011300)
        :
        );
}
как это заставить работать в C++ ? ("конвертировать" из gcc)

пишет asm отключен.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.03.2013, 19:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос gcc в c++ VS (C++):

Gcc и c++ - C++
Доброго времени суток. Начну с предисловия. Я всегда писал на C++ под винду и в линукс не совался. Сейчас, я выполняю задание(тестовое) и...

Компиляция gcc - C++
Подскажите как в VS скомпилировать программу с помощью компилятора gcc

Глюк gcc? - C++
Компилируя программу в gcc, выводит от части неверный ответ. В code::blocks все в порядке. Как это понимать? Программа выполняет сдвиг...

gcc компиляция - C++
Проблема возникла при компиляции проекта code::block. При build and run все работает, в папке bin проекта появляется .exe Но...

g++/gcc не компилирует - C++
есть С++ код #include <iostream> int main(){ std::cout << "hello ,world!"; } запускаю компилятор и он ничего не...

GotoXY в GCC - C++
ДОБРОГО ВРЕМЕНИ СУТОК !!! Я использую GCC и мне нужно использовать функцию GotoXY. В GCC нет библиотеки conio.h. Прошу дать код...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
01.03.2013, 19:32 #2
http://ru.wikibooks.org/wiki/Ассембл...рограммистов_C
http://www.iakovlev.org/index.html?p=1483&m=1
karaulov2
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 59
01.03.2013, 19:37  [ТС] #3
первая ссылка не работает, вторую не стал читал, так как мне нужно только переписать этот код что бы работал в VS 2010 C++ , GCC изучать не хочется ради пару строк кода
palva
2604 / 1826 / 262
Регистрация: 08.06.2007
Сообщений: 6,985
Записей в блоге: 4
01.03.2013, 19:46 #4
Используйте ключевое слово __asm
karaulov2
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 59
01.03.2013, 19:54  [ТС] #5
Цитата Сообщение от palva Посмотреть сообщение
Используйте ключевое слово __asm
C++
1
2
3
4
5
1>d:\projects\whack4\raihack.cpp(28): error C2400: синтаксическая ошибка во встроенном коде на языке ассемблера в "код операции"; обнаружено "bad token"
1>d:\projects\whack4\raihack.cpp(29): error C2400: синтаксическая ошибка во встроенном коде на языке ассемблера в "код операции"; обнаружено "bad token"
1>d:\projects\whack4\raihack.cpp(30): error C2400: синтаксическая ошибка во встроенном коде на языке ассемблера в "код операции"; обнаружено ":"
1>d:\projects\whack4\raihack.cpp(31): error C2400: синтаксическая ошибка во встроенном коде на языке ассемблера в "код операции"; обнаружено ":"
1>d:\projects\whack4\raihack.cpp(32): error C2400: синтаксическая ошибка во встроенном коде на языке ассемблера в "код операции"; обнаружено ":"
RibGeDx
3 / 3 / 0
Регистрация: 11.05.2012
Сообщений: 38
01.03.2013, 20:50 #6
Попробуйте:

C++
1
2
3
4
5
6
7
8
void MakeStrRef(RCString* sref,char* data){
    __asm 
    { 
      pushl eax
      call edx
      a(data), c(sref), d(GameBase+0x011300) //тут я хз, что это за фигня.. Может не работать )
    }
}
karaulov2
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 59
01.03.2013, 21:25  [ТС] #7
C++
1
2
3
file.cpp(31): warning C4405: eax: идентификатор является зарезервированным словом
file.cpp(31) error C2400: синтаксическая ошибка во встроенном коде на языке ассемблера в "код операции"; обнаружено "eax"
file.cpp(33) error C2400: синтаксическая ошибка во встроенном коде на языке ассемблера в "код операции"; обнаружено "("
ну уже ошибок меньше но все равно не работает

( GameBase это 6F000000 , оффсет в игре,а MakeStrRef должна создавать RCString(игровой текст) из обычного текста )
vua72
01.03.2013, 21:26
  #8

Не по теме:

RibGeDx, не прокатит, а с d -- синонимы регистров, но, т.к. автор не желает прочитать теорию, то и время на решение его проблемы тоже не стоит тратить.

Kastaneda
Форумчанин
Эксперт С++
4518 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,267
Записей в блоге: 2
Завершенные тесты: 1
01.03.2013, 21:26 #9
Цитата Сообщение от karaulov2 Посмотреть сообщение
ну уже ошибок меньше но все равно не работает
pushl - это AT&T синтаксис. В синтаксисе Intel пишется просто push.
А вот inline gcc assembler - это не просто AT&T, тут уже сложнее, я честно говоря его не знаю, но можно прочитать то, что советуют, и разобраться.
karaulov2
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 59
01.03.2013, 22:13  [ТС] #10
толку мне читать если я и в c++ не знаю, вообще асемблер не изучал.

это мне что бы переписать несколько строк нужно будет неделю учить эти синтаксисы и т.п


может кто поможет это переписать в VS c++ ?
Кликните здесь для просмотра всего текста
(т.е перепишет ?? )
Kastaneda
Форумчанин
Эксперт С++
4518 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,267
Записей в блоге: 2
Завершенные тесты: 1
01.03.2013, 22:18 #11
если ты на словах объяснишь, что нужно сделать, то можно просто свой код на синтаксисе Intel написать.
karaulov2
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 59
01.03.2013, 22:21  [ТС] #12
написал так:

C++
1
2
3
4
5
6
7
8
__declspec(naked) void __cdecl MakeCJassString(CJassString* sref,char* data){
    _asm
    {
        mov eax, g_GameDllAddress
        add eax, 0x011300
        jmp eax
    }
}
но что-то не очень работает т.е работает но почему-то прога в цикл входит (функция которая вызывает эту начинает выполнятся по 100500 раз )

Добавлено через 1 минуту
Цитата Сообщение от karaulov2 Посмотреть сообщение
( GameBase это 6F000000 базовый адресс Game.dll , 0x011300 - оффсет где находится процедура,а MakeStrRef должна создавать RCString(игровой текст) из обычного текста )
(, короче вызывает функцию(процедуру\) в памяти процесса вроде , которая создает RCString из обычного текста)
принимает 2 аргумента возвращает 0 , находится обычно тут: 6F011300.
Kastaneda
Форумчанин
Эксперт С++
4518 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,267
Записей в блоге: 2
Завершенные тесты: 1
01.03.2013, 22:28 #13
Цитата Сообщение от karaulov2 Посмотреть сообщение
т.е работает но почему-то прога в цикл входит (функция которая вызывает эту начинает выполнятся по 100500 раз )
Вместо jmp напиши call. Долго объяснять в чем дело, но если вызов этой функции происходит бесконечно, то значит все работает правильно. Когда на call заменишь такого не будет.

Добавлено через 1 минуту
Эмм, а в первом посте еще что-то в стек кладется (т.е. вызываемая ф-ция с аргументами).
karaulov2
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 59
01.03.2013, 22:56  [ТС] #14
(было
C++
1
2
3
4
5
6
7
8
void MakeStrRef(RCString* sref,char* data){
    asm("pushl %%eax\n"
        "call %%edx"
        :
        :"a"(data),"c"(sref),"d"(GameBase+0x011300)
        :
        );
}
)

C++
1
2
3
4
5
6
7
8
__declspec(naked) void __cdecl MakeCJassString(CJassString* sref,char* data){
    _asm
    {
        mov eax, g_GameDllAddress
        add eax, 0x011300
        call eax
    }
}
тот же цикл (в цикл попадает функция которая вызывает MakeCJassString) ну и MakeCJassString не выполняет нужные действия

а как правильно записать?

Добавлено через 10 минут
написал:
C++
1
2
3
4
5
6
7
8
void  MakeCJassString(CJassString* sref,char* data){
    _asm
    {
        mov eax, sref 
        mov ecx, data
        call g_GameDllAddress+0x011300
    }
}
цикл стал работать в 2 раза быстрее

но все равно не работает

Добавлено через 13 минут
вот с cheatengine скриншот:
http://screenshot.su/img/73/38/38/73...4b2b23e73f.jpg
Kastaneda
Форумчанин
Эксперт С++
4518 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,267
Записей в блоге: 2
Завершенные тесты: 1
01.03.2013, 22:58 #15
Я не пойму - почему нельзя вызвать ф-цию из .dll на языке С? зачем заморочки с ассемблером?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.03.2013, 22:58
Привет! Вот еще темы с ответами:

gcc update - C++
как обновить gcc? Нужно качать новую версию и заново устанавливать или есть какая-то команда, чтобы сделать это?

gcc VS DEV-C++ 4.9.9.2 - C++
Люди!! Срочно нужны знающие люди по данному вопросу.Только сейчас узнал,что вся практика будет в gcc...... Какие отличия вообще между ними...

Компиляция (gcc) - C++
Добрый вечер! После компиляции текстовый файл становится вдруг двоичным, как следствие его невозможно открыть для исправлений. Почему? ...

Странная вещь с gcc - C++
Здравствуйте. наткнулся на странную вещь такого рода: Имею вектор QVector<UINode*> m_nodesVector; Когда пишу так ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.03.2013, 22:58
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru