Если есть некая stdcall-функция(не API), написанная на ассеблере. Написана она мною, а потому некоторые моменты в ней не совсем корректны. Так, например, функция изменяет значение EBX, и не восстанавливает его по завершении.
Если эта функция вызывается из C++ или из VB в режиме отладки то все проходит гладко. А вот если вызвать ее из VB-программы в собраном варианте, то последняя спустя несколько шагов, после вызова функции рушится.
Важно отметить, что сама функция выполняется и VB даже корректно получает и обрабатываем(скажем, выводит MsgBox'ом) ее значение. А вот потом внезапно падает.
Идем далее: если приобщится к C++, то можно заметить, что перед выполнением люой функции последний сохраняет в стеке значения ebx,esi,edi и ebp. А потом соответственно восстанавливает. Ну последние три понятно: тут, видимо хранится что-то важное(вот только что?), но чем так выделяется именно EBX? Почему бы не сохранять, скажем сx или edx?
И что делает команда stos?
ну и еще из наблюдений: следующий оператор:
- Код: Выделить всё
return 0;
Преобразуется во что бы вы думали? нет, не угадали:
- Код: Выделить всё
xor eax,eax
С чего бы это?