Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: C++ и ASM  (Прочитано 561 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн SR_team

  • Автор темы
  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
C++ и ASM
« : 07 Мая 2016, 12:09:22 »
У меня есть виртуаьная машина выполняющая некоторые скрипты, писал под visual studio на винде. Для удобной регистрации новых команд реализовал их регистрацию в map форматом <команда, указатель на функцию>, соответственно при обработке скриптов использовал вызов коллбека команды на asm, где в качестве параметра кидал локальную переменную - указатель на структуру скрипта. Сейчас хотел портировать сею ВМ на линь, но столкнулся с проблемой передачи локальных переменных - передается не понятно что. Если переменная глобальная или статичная, или указатель, то все нормально, а вот локалки не передаются, при этом использование & g++ в asm вставках видеть не хочет. Подскажите пожалуйста как можно без костыля в качестве дополнительной переменной-указателя передать локальную переменную?

Пользователь добавил сообщение 07 Мая 2016, 13:30:27:
В общем нашел причину такого поведения. я сохраняю предыдущее значение регистра, но при этом значение стека не меняется автоматически, т.е. после push надо добавить add esp, 4 и все будет норм, и после pop соответственно sub esp, 4. Для команд типа pushad/popad вместо 4 будет 32.
Вопрос немного меняется - можно ли как-то автоматизировать работу стека? В винде вроде значение стека само изменялось при вызове команд вроде push/pop
« Последнее редактирование: 07 Мая 2016, 13:30:27 от SR_team »

 

Страница сгенерирована за 0.015 секунд. Запросов: 22.