У меня есть виртуаьная машина выполняющая некоторые скрипты, писал под 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