Здравствуйте whiteForest, Вы писали:
F>Здравствуйте adontz, Вы писали:
VC++ очень правильно делает. Это в народе называется защита от дурака
объясняю подробно
есть некая функкция
void a(int x,float y) // возвращаемый тип значения не имеет
{
// some local variables here
char z;
// code
__asm
{
label1:
}
}
её стековый кадр для stdcall напрмер
1 byte // char z
4 bytes // int x
6 bytes // float y
4 bytes // адресс откуда вызвали a()
есть другая процедура
void b(char p)
{
// some local variables here
long q;
// code
__asm
{
label2:
}
}
её стековый кадр
4 bytes // long q
1 byte // char p
4 bytes // адрес откуда вызвали b()
Если перепрыгнуть с адреса
label1 на
label2, то поле работы процедуры будет очищено из стека 5 байт и процедура возвратит управления по адресу не тому откуда её вызывали а старшие 4 байта локальной переменной
y типа
float
Такие пререходы нарушают принцыпы структурного программирования на которых базируются C и C++ и не разрешены ни стандартом, ни компилятором, ни элементарной логикой
Такое позволяют только автономные ассемблеры
tasm masm wasm
F>Если ответ Вам не известен, просьба не отвечать.
На вашем месте я бы
1) Ознакомлся с азами архитектуры Intel x86 процессоров прежде чем писать на ассемблере
2) Прочёл пару книг по структурному программированию и его преимуществам
3) защёл на
сюда так как вы пока новичок на этом форуме и вам наверное не понятно что здесь люди привыкли уважать друг друга и писать сообщения в вежливой форме !!!