Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 59

gcc в c++ VS

01.03.2013, 19:19. Показов 2184. Ответов 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 отключен.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.03.2013, 19:19
Ответы с готовыми решениями:

GCC Сборка 32 разрядной версии GCC 64 разрядным GCC
Доброго времени суток. Возникла необходимость под 32х разрядный Linux, собрать 32 разрядный GCC. Но на моей основной машине установлена 64...

gcc-4.7.0
Здравствуйте, как установить gcc-4.7.0 на Ubuntu 11.10 ? Текущая версия 4.6.1 и при sudo apt-get install gcc пишет, что установлена...

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

19
419 / 418 / 167
Регистрация: 28.11.2010
Сообщений: 1,183
01.03.2013, 19:32
http://ru.wikibooks.org/wiki/А... аммистов_C
http://www.iakovlev.org/index.html?p=1483&m=1
0
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 59
01.03.2013, 19:37  [ТС]
первая ссылка не работает, вторую не стал читал, так как мне нужно только переписать этот код что бы работал в VS 2010 C++ , GCC изучать не хочется ради пару строк кода
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
01.03.2013, 19:46
Используйте ключевое слово __asm
0
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 59
01.03.2013, 19:54  [ТС]
Цитата Сообщение от 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: синтаксическая ошибка во встроенном коде на языке ассемблера в "код операции"; обнаружено ":"
0
 Аватар для RibGeDx
3 / 3 / 2
Регистрация: 11.05.2012
Сообщений: 38
01.03.2013, 20:50
Попробуйте:

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) //тут я хз, что это за фигня.. Может не работать )
    }
}
0
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 59
01.03.2013, 21:25  [ТС]
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(игровой текст) из обычного текста )
0
01.03.2013, 21:26

Не по теме:

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

0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
01.03.2013, 21:26
Цитата Сообщение от karaulov2 Посмотреть сообщение
ну уже ошибок меньше но все равно не работает
pushl - это AT&T синтаксис. В синтаксисе Intel пишется просто push.
А вот inline gcc assembler - это не просто AT&T, тут уже сложнее, я честно говоря его не знаю, но можно прочитать то, что советуют, и разобраться.
0
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 59
01.03.2013, 22:13  [ТС]
толку мне читать если я и в c++ не знаю, вообще асемблер не изучал.

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


может кто поможет это переписать в VS c++ ?
Кликните здесь для просмотра всего текста
(т.е перепишет ?? )
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
01.03.2013, 22:18
если ты на словах объяснишь, что нужно сделать, то можно просто свой код на синтаксисе Intel написать.
1
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 59
01.03.2013, 22:21  [ТС]
написал так:

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.
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
01.03.2013, 22:28
Цитата Сообщение от karaulov2 Посмотреть сообщение
т.е работает но почему-то прога в цикл входит (функция которая вызывает эту начинает выполнятся по 100500 раз )
Вместо jmp напиши call. Долго объяснять в чем дело, но если вызов этой функции происходит бесконечно, то значит все работает правильно. Когда на call заменишь такого не будет.

Добавлено через 1 минуту
Эмм, а в первом посте еще что-то в стек кладется (т.е. вызываемая ф-ция с аргументами).
1
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 59
01.03.2013, 22:56  [ТС]
(было
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 скриншот:
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
01.03.2013, 22:58
Я не пойму - почему нельзя вызвать ф-цию из .dll на языке С? зачем заморочки с ассемблером?
0
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 59
01.03.2013, 23:04  [ТС]
Цитата Сообщение от Kastaneda Посмотреть сообщение
Я не пойму - почему нельзя вызвать ф-цию из .dll на языке С? зачем заморочки с ассемблером?

ее там просто нет, там какие-то native функции все
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
01.03.2013, 23:11
Ну а почему бы не создать указатель на функцию с нужными аргументами, присвоить ему значение g_GameDllAddress+0x011300 и вызвать функцию через указатель?
0
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 59
01.03.2013, 23:12  [ТС]
все, нашел в интернете решение:

C++
1
2
3
4
5
6
7
8
9
10
11
12
void GetJassString(char *szString, JassString *String)
{
    DWORD Address = GameDll + 0x011300;
 
 
    __asm
    {
        PUSH szString;
        MOV ECX, String;
        CALL Address;
    }
}
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
01.03.2013, 23:30
Цитата Сообщение от Kastaneda Посмотреть сообщение
Ну а почему бы не создать указатель на функцию с нужными аргументами, присвоить ему значение g_GameDllAddress+0x011300 и вызвать функцию через указатель?
Ну судя по посту №18, там очень криворукокостыльный специфичный ABI. Так что действительно надо писать ассемблером.
0
01.03.2013, 23:43

Не по теме:

Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Ну судя по посту №18, там очень специфичный ABI. Так что действительно надо писать ассемблером.
ну да, я хотел написать, про странность передачи аргумента на регистре (при чем только одного), но мне влом было:) Похоже библиотеку тоже на асме писали, или использовали какой-то специфичный компилятор.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.03.2013, 23:43
Помогаю со студенческими работами здесь

gcc.4.6.2
собираю gcc.4.6.2. это уже на этапе make. checking for x86_64-unknown-linux-gnu-gcc......

IAR >> GCC
Нашёл код под IAR, как переделать под GCC. __no_init volatile union { unsykned char FLAGS; struct { char timer0: 1; char num:...

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

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

gcc ресурс
Есть возможность собрать исходник с ресурсом, то есть файлом например текстовый, который будет помещен в программу и к которому можно будет...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru