Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
До запуска main выполняется код startup. практически всегда он написан на ассемблере. (хотя я видел реализацию на C - не совсем даже понимаю как оно работало). этот код выполняет служебные действия типо инициализации стеков, начальной инициализации переменных и т.п. В коде стартапа есть переход на main. Ну а чтобы пропустить стартап при отладке, нужно поставить галку что-то типа jump to main() в опциях проекта (обычно где-то в Debug). Часть переменных (глобальные) уже будет инициализирована. А вот инициализация остальных переменных может быть так соптимизирована, что переменной может после оптимизации "как бы не быть";) или инициализация производиться в другом месте программы (обязательно не позже момента использования;)), что примерно одно и то же. Т.е. удивляться не стОит. Облом загружаться в ЯРу - не помню как там, а в Кайле, например, код, похеренный оптимизатором, не имеет в дебаггере слева от строки подсеренных или зелёненьких;) прямоугольничков. Например, в программах с множественным ветвлением и переходами оптимизатор может творить такие чудеса, что код становится практически неузнаваем, но при этом реверс-анализ ассемблерного кода позволяет понять, что же он и как рихтанул.
Составить ответ | Вернуться на конференцию
Ответы