СПОСОБ И УСТРОЙСТВО ДЛЯ АДАПТАЦИИ ФУНКЦИЙ ПО УПРАВЛЕНИЮ РАБОЧИМИ ПРОЦЕССАМИ
METHOD AND DEVICE FOR ADAPTATION OF FUNCTIONS OF WORKING PROCESSES CONTROL

Уровень техники
Настоящее изобретение относится к способу и устройству для адаптации функций по управлению рабочими процессами, прежде всего рабочими процессами в автомобиле, в соответствии с ограничительными частями независимых пунктов формулы изобретения. Кроме того, настоящее изобретение относится к соответствующему блоку управления и соответствующему компьютеру для разработки функций, а также к предназначенной для указанной цели компьютерной программе и соответствующему компьютерному программному продукту в соответствии с ограничительными частями соответствующих пунктов формулы изобретения.
При разработке функций программного обеспечения устройств управления, в частности блоков управления различными системами автомобиля, например двигателем, тормозной системой, коробкой передач и другими, используется принцип выполнения функций параллельно существующему оборудованию, или в обход его (bypassing), реализуемый методом быстрого прототипирования (макетирования) для разработки и тестирования новых функций устройств или блоков управления. Подобные методы разработки функций могут использоваться и в любых других случаях применения программного обеспечения блоков управления, например в области автоматизации, станкостроения и т.д.
В качестве способа разработки могут использоваться два варианта проектирования с параллельным выполнением функций: один с выполнением новых функций вне существующего блока управления, описанный, например, в DE 10106504 А1, а другой - с выполнением новых функций внутри существующего блока управления, описанный, например, в DE 10228610 А1.
При этом публикация DE 10106504 А1 относится к способу и эмулирующему устройству для эмуляции функций управления и/или регулирования блока управления или регулятора, в частности автомобильного. Эмулируемые функции переносятся на внешний эмулирующий компьютер, причем перед началом эмуляции посредством программного интерфейса эмулирующего компьютера и программного интерфейса блока управления/регулятора создают канал передачи данных. Для существенного ускорения разработки и программирования новых функций управления/регулирования блока управления/регулятора программные интерфейсы, используемые для эмуляции различных функций управления/регулирования, предлагается конфигурировать до начала эмуляции без внесения изменений в программное обеспечение.
В публикации DE 10228610 А1 описаны способ и устройство для проверки программы управления посредством по меньшей мере одной обходной функции, причем управляющая программа совместно с этой по меньшей мере одной обходной функцией выполняются на одном электрическом вычислительном устройстве. При этом сопряжение с обходными функциями происходит путем посредством динамического связывания в заданных интерфейсах.
Для обеспечения возможности работы обоих вышеуказанных способов и устройств требуется программное обеспечение блока управления должно иметь точки сопряжения (вмешательства в программу). Эти точки сопряжения можно описать понятием "врезка". Врезка - это именно то место функции программы, в котором содержимое переменной блока управления определяется не самой программой, а обходными путями, например с помощью обходной программной функции. Такие врезки весьма индивидуальны и обычно не входят в состав программного обеспечения блока управления, поскольку на них расходуются ресурсы памяти.
Если разработчику функций нужна программа для блока управления с врезками, то эти врезки встраиваются в базовую программу отделом разработки программного обеспечения только по соответствующему поручению. Для этого разработчики программного обеспечения блока управления вручную меняют исходный код соответствующей функции и путем компиляции и компоновки создают новую программу для блока управления, которая специально предназначена для применения в процессе прототипирования.
Недостаток такого известного способа и устройства заключается в том, что на подготовку версии программы для быстрого прототипирования уходит достаточно много времени. Существенным фактором при этом являются связанные с этим высокие техническая сложность и административные затраты на постановку и выполнение задачи по внесению в базовое программное обеспечение блока управления необходимых точек сопряжения.
В соответствии с сегодняшним уровнем знаний в основу еще одного известного способа, сопоставимого с рассмотренными выше, положена идея, состоящая в том, чтобы лишь заменять команды сохранения (доступ для записи к переменной блока управления) командами перехода к подфункции. Однако в микроконтроллерах со смешанным набором команд, включающим 16-и 32-разрядные инструкции, команды сохранения могут иметь длину 16 бит, поскольку в таких микроконтроллерах используется косвенная адресация с использованием адресных регистров. Такие 16-разрядные команды нельзя использовать для вызова подфункции, поскольку прямой адресный вызов подфункции требует использования 32-разрядной команды перехода. Таким образом, известный способ применим лишь ограниченно и совместим лишь с микропроцессорами, в которых используется полностью 32-разрядный набор команд. Иными словами, при заданной разрядности команды сохранения гибкость системы в отношении разработки функций сильно ограничена. Кроме того, этот способ, предусматривающий замену команд сохранения командами перехода к подфункции, неприменим к командам сохранения, манипулировать которыми недопустимо или нежелательно по каким-либо иным причинам.
Исходя из вышеизложенного, в основу настоящего изобретения была положена задача разработки способа, который позволял бы помещать врезки в существующую программу, не внося изменений в ее исходный код.
Преимущества изобретения
В изобретении предлагаются способ и устройство для адаптации функций по управлению рабочими процессами, предпочтительно осуществляемыми в автомобилях, где указанные функции обращаются по меньшей мере к одной глобальной переменной по меньшей мере одной программы управления, и этой глобальной переменной поставлена в соответствие адресная информация, которая находится по меньшей мере в одном средстве хранения данных и которую загружают из средства хранения данных посредством по меньшей мере одной команды загрузки, причем производят замену этой адресной информации глобальной переменной команды загрузки.
При этом на основании этой адресной информации можно определить начальный адрес функции, и тогда эту функцию можно расширить (нарастить) или заменить дополнительными функциями, что позволяет путем соответствующей замены адресной информации расширять функции по управлению рабочими процессами за счет дополнительных функций или заменять их такими дополнительными функциями.
Таким образом, в изобретении используется т.н. динамическое присоединение или включение программных врезок (dynamic hooks) без изменений исходного кода. Предлагаемый в изобретении способ, а также соответствующее устройство изменяют адресную информацию команд загрузки (LOAD), изменяют обращения (вызовы) к функциям и добавляет новые программные коды. Эти изменения производятся в имеющейся версии программы на основе, например, целенаправленных модификаций шестнадцатеричного (HEX) кода.
В частном варианте адресную информацию глобальной переменной может быть целесообразным заменять адресной информацией переменной-указателя, которая находится в зарезервированной области памяти, в частности средства хранения данных (запоминающего устройства) блока управления.
В дополнение к описанной выше модификации команд загрузки другой вариант предлагаемого в изобретении способа предусматривает манипулирование командой сохранения глобальной переменной путем замены этой команды сохранения командой перехода. Замена команды сохранения командой перехода предпочтительно позволяет добавлять к функциям базовой программы по управлению рабочими процессами дополнительные функции и/или заменять имеющиеся.
Помимо описанного выше способа и устройства для его осуществления предметом изобретения также является блок управления, имеющий такое устройство, а также пригодная для осуществления указанного способа компьютерная программа. Эта компьютерная программа выполняется компьютером, и прежде всего предлагаемым в изобретении блоком управления или персональным компьютером (ПК). При этом предлагаемая в изобретении компьютерная программа может храниться на любом машиночитаемом носителе. Такой машиночитаемый носитель данных может, в частности, представлять собой дискету, компакт-диск, DVD-диск, карту памяти (например, карту типа Memory Stick) или любую иную портативную запоминающую среду. Очевидно, что он может представлять собой и постоянное запоминающее устройство, программируемое постоянное запоминающее устройство, стираемое программируемое постоянное запоминающее устройство, электрически стираемое программируемое постоянное запоминающее устройство или флэш-память, либо энергозависимое запоминающее устройство с произвольной выборкой или иное запоминающее устройство. В соответствии с вышеизложенным настоящим изобретением не накладывается ограничений на выбор запоминающей среды, соответственно машиночитаемого носителя для хранения предлагаемого в изобретении программного продукта.
Изобретение способно ускорить осуществление и увеличить гибкость и удобство различных методов быстрого прототипирования, а также тестирования и отладки программного обеспечения.
Таким образом, изобретение позволяет выполнять программные врезки, не ограничивая ресурсы для разработки программного обеспечения. Тем самым изобретение позволяет снизить общие технические и административные, а также финансовые затраты на разработку и отладку новых функций.
Изобретение одновременно обеспечивает поддержку микропроцессоров со смешанным набором команд, например микропроцессоров с 16- и 32-разрядными инструкциями.
Иные преимущества и предпочтительные варианты осуществления изобретения рассмотрены в описании, а также указаны в отличительных признаках пунктов формулы.
Краткое описание чертежей
Ниже изобретение более подробно рассмотрено со ссылкой на прилагаемые чертежи, на которых показано:
на фиг.1 - предлагаемое в изобретении устройство для адаптации функций,
на фиг.2 - последовательность операций по определению мест программных врезок в программе,
на фиг.3 - блок-схема, иллюстрирующая применимость различных методов модификации команд загрузки и/или сохранения,
на фиг.4 - иллюстрация к первому и предпочтительному способу модификации содержащейся в программном коде команды загрузки,
на фиг.5 - иллюстрация ко второму способу модификации содержащейся в программном коде команды сохранения,
на фиг.6 - иллюстрация к третьему способу модификации содержащейся в программном коде команды сохранения,
на фиг.7 - иллюстрация к четвертому способу модификации содержащейся в программном коде команды сохранения,
на фиг.8 - иллюстрация принципов адаптации вызовов функций управления рабочими процессами,
на фиг.9 - функция перехвата (ловушки) для присоединения дополнительных функций,
на фиг.10 - схематичное изображение сегментов памяти в средстве хранения данных в отношении функции перехвата,
на фиг.11 - общая схема процесса разработки в соответствии с изобретением.
Описание вариантов осуществления изобретения
На фиг.1 схематично изображено предлагаемое в изобретении устройство для адаптации функций, включающее блок 100 управления и прикладную систему 101, связанные друг с другом соединением 102 с интерфейсами 103 и 104. Это соединение 102 может быть как проводным, так и беспроводным. Позицией 105 обозначен микропроцессор, прежде всего со смешанным набором команд. Позицией 106 обозначено средство хранения данных, в котором имеются адресный регистр 108, регистр 107 данных и область памяти, где написана по меньшей мере одна программа с подлежащими адаптации функциями. При этом необходимые для осуществления изобретения средства контроля или управления могут содержаться в прикладной системе или быть представлены ей, или же могут реализоваться при использовании самого микропроцессора. Аналогичным образом необходимые для осуществления изобретения средства хранения данных могут размещаться вне блока управления, прежде всего в прикладной системе. Предлагаемое в изобретении устройство может иметь конструкцию, схематично показанную на фиг.1.
Хотя процесс адаптации функций может осуществляться с выполнением функций параллельно существующему оборудованию вне его (с использованием внешнего эмулятора), в предпочтительном варианте такая адаптация осуществляется внутрисхемно таким образом, чтобы она была встроена в процесс выполнения программы с обеспечением динамического присоединения точек сопряжения (динамических ловушек - dynamic hooks) без изменения исходного кода.
Предлагаемое в изобретении устройство позволяет изменять адресную информацию команд загрузки, содержимое команд сохранения и адресную информацию вызовов функций и добавляет новые программные коды. В рассматриваемом варианте осуществления изобретения эти изменения производятся в имеющейся программе блока управления на основе целенаправленных модификаций ее шестнадцатеричного кода.
Ниже пояснены следующие стадии и аспекты предлагаемого в изобретении решения "динамическая программная врезка":
- определение подлежащих модификации фрагментов программы,
- модификация этих фрагментов, включающая в себя модификацию команд загрузки/сохранения и модификацию вызовов функций,
- составление дополнительного программного кода,
- интеграция кода программных врезок,
- сегментация областей памяти, и
- процесс разработки для составления программного кода.
Описанный ниже способ основан на использовании микроконтроллеров со смешанными наборами команд, и прежде всего микроконтроллеров с поддержкой как 16-, так и 32-разрядных инструкций. Примером такого микроконтроллера может служить, например, модель TriCore TC17xx (RISC/DSP/CPU) производства компании Infineon, применяемая в блоках управления рабочими процессами, прежде всего относящимися к автомобилям, например в блоках управления двигателем, системами рулевого управления и привода, а также тормозными и иными системами.
Однако предлагаемый в изобретении способ может применяться и к микропроцессорам, не имеющим смешанного набора команд, прежде всего к микропроцессорам, поддерживающим исключительно 32-разрядные инструкции (к RISC-процессорам с сокращенным набором команд, например PowerPC/ МРС5хх).
В принципе способ исходит из последовательного расположения команд на машинном языке, относящимся к компилятору генератором кода. Иными словами, в контексте настоящего изобретения существенно, чтобы команды загрузки в соответствующие адресные регистры адресной информации, например адресной информации косвенно адресуемой переменной блока управления, располагались последовательно. В противоположность этому у прямо адресуемой переменной адресная информация содержится в самой команде. Описанный выше подход типичен для большинства компиляторов.
Определение подлежащих модификации фрагментов программного кода (фиг.2)
Объектом необходимой для осуществления предлагаемого в изобретении способа предварительной модификации программы блока управления является исходная программа блока управления, представленная в виде шестнадцатеричного файла. Помимо нее к необходимым исходным данным относятся файл описания данных (например, ASAP) и файл компоновщика (например, двоичный файл компоновщика ELF), содержащие информацию о переменных и функциях блока управления.
Сначала при помощи программы-дисассемблера, работающей, например, под управлением операционной системы Windows, шестнадцатеричный файл дисассемблируется, иными словами преобразуется в ассемблерный или близкий к нему исходный текст. Соответствующие адреса переменных блока управления, для которых необходимо предусмотреть возможность их подмены, иными словами их определения внешними по отношению к базовой программе блока управления функциями обратного вызова, считываются из файла описания данных или из сформированной специально для этой цели справочной базы данных.
Специально разработанный для осуществления предлагаемого в изобретении способа дисассемблер, представляющий собой программу, работающую, например, под управлением операционной системы Windows, с учетом относящейся к искомой переменной блока управления адресной информации ищет в дисассемблированном программном коде способные влиять на значение (иными словами, содержание) этой переменной команды доступа к ней (команды ее загрузки и сохранения).
Поскольку указанный дисассемблер является программой, работающей под управлением операционной системы Windows, он также выполняет функции программы моделирования, проверяющей содержимое регистров после каждой команды на языке ассемблера. Фрагмент кода дисассемблированной программы, в который требуется интегрировать программные врезки, считается найденным после нахождения в этом коде команды сохранения и выявления соответствия между содержимым загруженного адресного регистра и адресной информацией искомой переменной блока управления, либо выявления соответствия адресной информации команды сохранения адресу переменной.
Конкретные особенности применяемого способа модификации найденных фрагментов кода зависят от используемого в них способа адресации переменной блока управления.
Сказанное проиллюстрировано на фиг.2. Позицией 201 обозначен программный код блока управления. Позицией 202 обозначена программная функция. Стрелками 203 обозначен описанный выше метод определения команд сохранения. Позицией 204 обозначена команда сохранения при обращении к переменной, причем при прямой адресации адрес сохранения, относящийся к команде сохранения, представляет собой непосредственно адрес ячейки запоминающего устройства с произвольной выборкой, в которую должна производиться запись, а при косвенной адресации соответствующий адрес содержится в адресном регистре, причем указанная информация позволяет впоследствии локализовать команды загрузки соответствующей переменной.
Стрелками 205 обозначен описанный выше метод определения команд загрузки. Сами команды загрузки адреса переменной, в особенности глобальной переменной, обозначены позицией 206.
Модификация фрагментов программного кода (фиг.3-8)
В соответствии с предлагаемым в изобретении способом для модификации фрагментов программного кода, в которые предполагается интегрировать программные врезки, сначала в исходной программе с учетом различных способов адресации локализуются фрагменты кода, содержащие команды загрузки и/или сохранения, что позволяет локализовать функцию блока управления, к которой относятся эти команды, и затем интегрировать во все обеспечивающие обращение к этой функции фрагменты исходного программного кода команды обращения к функциям перехвата, представляющим собой заранее подготовленные фрагменты соответствующего изобретению кода, обеспечивающего возможность динамического обращения к внешним функциям обратного вызова, причем вызов исходной функции блока управления становится лишь одной из обеспечиваемых такими функциями перехвата возможностей.
Модификация команд загрузки/сохранения
В описанном микроконтроллере(-ах) используется множество самых разных модификаций различных способов адресации. Все это многообразие может быть сведено к минимуму.
Ниже описаны четыре способа интеграции в базовую программу программных врезок, в совокупности перекрывающие практически все известные методы доступа к глобальным переменным в режиме записи. Допустимы и иные методы анализа кода, например относительная адресация с использованием информации, предварительно записанной в выделенные для этой цели адресные регистры.
Различные способы модификации команд загрузки и/или сохранения показаны на фиг.3. При этом команды сохранения st.x имеют следующие значения: st.b = сохранить байт, st.h. = сохранить полуслово и st.w. = сохранить слово. Ниже более подробно рассмотрены четыре метода, показанных на фиг.3.
Процесс модификации фрагментов исходного кода по методу 1 более подробно проиллюстрирован на фиг.4. Метод 1 применим, например, к 16-разрядной команде сохранения при косвенной адресации. Исходя из известного местоположения найденной команды сохранения, в дисассемблированном программном коде могут быть локализованы фрагменты кода, содержащие соответствующие команды загрузки. Для этого метода найденные команды имеют решающее значение. Этот метод применим не только в случаях проблем со смешанным набором команд, но и в тех случаях, когда замена команды сохранения командой перехода невозможна по иным причинам.
В соответствии с методом 1 локализованные по следующим за ним командам сохранения команды загрузки заменяются адресной информацией переменной-указателя. Эта переменная-указатель формируется средой разработки или инструментальной средой, прежде всего средой разработки DHooks. Адрес переменной-указателя хранится в зарезервированной свободной области памяти средства хранения данных, отведенной под хранение информации об адресах переменных. Модифицированные командами загрузки обращаются к тем же адресными регистрам, что и исходные команды. Отличие таких измененных команд загрузки заключается в способе обращения к адресному регистру и адресной информации.
Принцип, положенный в основу метода 1, проиллюстрирован на фиг.4. На указанном чертеже позицией 401 обозначен исходный, а позицией 411 - модифицированный программный код. Позициями 402 и 406, а также 417 и 407 обозначена функция блока управления, в рассматриваемом случае также обозначенная как function_a(). При этом позициями 402 и 417 обозначены соответственно команды и последовательности команд, а позициями 406 и 407 - выполняемые этими командами функции. ахх% обозначает доступ к адресному регистру (например, а0…а15 при работе с 16-разрядными инструкциями), а dxx% - доступ к регистру данных (например, d0…dl5 при работе с 16-разрядными инструкциями). Помимо этого на чертеже изображены обозначенные позициями 408, 409, 410, 413, 414 и 415 команды movh.a и Id.a загрузки, а также команда сохранения st.x. В рассматриваемом примере команды movh.a и Id.а представляют собой 32-разрядные инструкции (см. поз.412 и 403). Команда сохранения st.x представляет собой 16-разрядную инструкцию (см. поз.405) и по этой причине в рассматриваемом примере не может быть заменена 32-разрядной командой перехода. Аналогичный подход применим и к любым иным случаям, в которых подобная замена невозможна или нежелательна. Новый предлагаемый в изобретении код инструкции, соответственно фрагмент 403 программного кода, записывается в позицию 412, а команды загрузки изменяются на переменную-указатель iB_PtrMsg_xxx (от англ. Ptr = Pointer = указатель). Процесс замены адреса переменной блока управления адресом переменной-указателя обозначен стрелками 404. Способ составления дополнительного программного кода или разработки дополнительных функций боле подробно рассмотрен ниже, после описания четырех методов модификации исходного кода.
Процесс модификации фрагментов исходного кода по методу 2 подробнее поясняется на фиг.5.
При этом в описании этого метода, равно как и всех остальных предлагаемых в изобретении методов модификации исходного кода, используются те же обозначения и сокращения, что и в описании метода 1. Позицией 501 обозначен исходный, а позицией 511 - модифицированный программный код. Позициями 502 и 506, а также 517 и 507 обозначена функция блока управления, в рассматриваемом случае также обозначенная как function_a(). При этом позициями 502 и 517 обозначены соответственно команды и последовательности команд, а позициями 506 и 507 - выполняемые этими командами функции. Символами %ахх обозначен доступ или обращение к адресному регистру (например а0…а15 при работе с 16-разрядными инструкциями), а символами %dxx - доступ к регистру данных (например d0…d15 при работе с 16-разрядными инструкциями). Здесь также упоминаются команды movh.a и Id.а (команды загрузки) и команда сохранения st.x. Однако в данном случае команда сохранения st.x представляет собой 32-разрядную инструкцию (см. поз. 505) и по этой причине в рассматриваемом примере может быть заменена 32-разрядной командой jla перехода. Для этого в позицию 505 записывается новый предлагаемый в изобретении код инструкции, соответственно фрагмент 503 программного кода, содержащий команду jla перехода и адрес перехода.
Метод 2 применим к 32-разрядной команде сохранения при косвенной адресации. 32-разрядная команда сохранения заменяется командой jla 512 абсолютного перехода к программной функции (balcony_M2) расширенного динамического обращения к внешним функциям обратного вызова (вызов программной функции расширенного динамического обращения к внешним функциям обратного вызова обозначен стрелкой 520). Применительно к команде jla перехода адрес возврата сохраняется в адресном регистре а11 (см. поз. 521).
В указанной программной функции 521 расширенного динамического обращения к внешним функциям обратного вызова содержимое адресного регистра %ахх, посредством которого адресуется переменная блока управления, заменяется адресным значением переменной-указателя (iB_PtrMsg_xxx). Индекс адресного регистра %ахх и ранее загруженного регистра %dxx данных в программной функции 521 расширенного динамического обращения к внешним функциям обратного вызова идентичен.
Если для создания программной врезки задействуются 32-разрядные команды сохранения, то для этого необходим дополнительный программный код. Этот программный код генерируется в среде разработки DHooks и называется "функция расширенного динамического обращения к внешним функциям обратного вызова" (также функция balcony). Функции расширенного динамического обращения к внешним функциям обратного вызова содержат дополнительные механизмы инициализации, копирования и установки программных врезок (динамического обращения к внешним функциям обратного вызова) и представляют собой программные функции, расширяющие функциональность программных врезок. Использование функций расширенного динамического обращения к внешним функциям обратного вызова предусматривается предлагаемыми в изобретении методами 2, 3 и 4 с использованием программных врезок.
Команда jla перехода не изменяет содержимое используемого регистра %dxx данных. В программной функции расширенного динамического обращения к внешним функциям обратного вызова происходит лишь осуществляемая посредством указателя адресация, иными словами перевод команды сохранения на переменную-указатель. Сама запись данных, осуществляемая по команде сохранения st.x, ничем не отличается от записи, осуществляемой по аналогичной команде исходного программного кода.
Затем осуществляется обозначенный стрелкой 522 косвенный обратный переход (возврат) по сохраненному в адресном регистре all адресу возврата к функции блока управления.
Процесс модификации фрагментов исходного кода по методу 3 более подробно проиллюстрирован на фиг.6.
При этом в описании этого, равно как всех остальных предусмотренных изобретением методов модификации исходного кода, используются те же обозначения и сокращения, что и в описании метода 2. При этом позицией 601 обозначен исходный, а позицией 611 - модифицированный программный код. Позициями 602 и 606, а также 617 и 607 обозначена функция блока управления, в рассматриваемом случае также обозначенная как iunction_a(). При этом позициями 602 и 617 обозначены соответственно команды и последовательности команд, а позициями 606 и 607 - выполняемые этими командами функции. В данном методе используется особая разновидность команды сохранения st.x, a именно команда st.t. Эта команда сохранения st.t представляет собой 32-разрядную инструкцию (см. поз.605) и по этой причине в рассматриваемом примере может быть заменена 32-разрядным вызовом функции (call balcony_M3). Для этого в позицию 603 записывается новый предлагаемый в изобретении код инструкции, соответственно фрагмент 605 программного кода, содержащий команду вызова соответствующей функции и обозначение вызываемой функции (в рассматриваемом случае call balcony_M3).
Метод 3 применим к 32-разрядной команде сохранения st.t при прямой адресации 618 (команда сохранения с адресом 610). 32-разрядная команда сохранения заменяется 32-разрядным вызовом (call balcony_M3, 603) программной функции (balcony_M3, 621) расширенного динамического обращения к внешним функциям обратного вызова, причем процесс такой замены обозначен стрелкой 604. Программная функция 621 расширенного динамического обращения к внешним функциям обратного вызова включает в себя запрос программной врезки и команду сохранения в исходном состоянии. При активизированной врезке выполнения команд сохранения не происходит. Таким образом обеспечивается развязка переменной и функции блока управления. Для этого командой 612 вызывается функция 621 расширенного динамического обращения к внешним функциям обратного вызова (функция balcony), причем процесс такого вызова обозначен стрелкой 620. В этом случае обозначенный стрелкой 622 возврат в функцию блока управления осуществляется с использованием адреса 619 переменной электронного блока управления (adr. of ecu Variable).
Процесс модификации фрагментов исходного кода по методу 4 подробнее поясняется на фиг.7.
При этом в описании этого метода, как всех остальных методов модификации исходного кода, используются те же обозначения и сокращения, что и в описании метода 2. Позицией 701 обозначен исходный, а позицией 711 - модифицированный программный код. Позициями 702 и 706, а также 717 и 707 обозначена функция блока управления, в рассматриваемом случае также обозначенная как function_a(). При этом позициями 702 и 717 обозначены соответственно команды и последовательности команд, а позициями 706 и 707 - выполняемые этими командами функции. Символами %ахх обозначен доступ к адресному регистру, а символами %dxx и %dyy - доступ к регистру данных. Помимо этого в данном методе используются аналогичные описанным применительно к предыдущим методам команды mov и st.x (команда сохранения), команда call вызова функций и команда jla перехода. В рассматриваемом случае команда сохранения st.x представляет собой 32-разрядную инструкцию (см. поз.705) и по этой причине в рассматриваемом примере может быть заменена 32-разрядной командой jla перехода. Для этого в позицию 703 записывается новый предлагаемый в изобретении код инструкции, соответственно фрагмент 705 программного кода, содержащий команду jla перехода и адрес перехода.
Метод 4 применим к 32-разрядной команде st.x 710 сохранения при прямой адресации 718. 32-разрядная команда сохранения заменяется 32-разрядной командой jla перехода (Jla balcony_M4_a). Адресом перехода служит первая программная функция balcony _М4_а(), 721 расширенного динамического обращения к внешним функциям обратного вызова, процесс вызова которой обозначен стрелкой 720. В этой первой программной функции 721 расширенного динамического обращения к внешним функциям обратного вызова содержимое ранее загруженного регистра %dxx данных сохраняется в качестве значения временной буферной переменной iB_TmpMsg_xxx инструментальной среды DHooks. Функция 721 при помощи команды call вызова функции обращается к другой функции balcony_M4_b(), 724 расширенного динамического обращения к внешним функциям обратного вызова, причем процесс такого обращения обозначен стрелкой 723. Эта вторая функция расширенного динамического обращения к внешним функциям обратного вызова содержит, как и в случае метода 3, собственно программную врезку. Функция 724 расширенного динамического обращения к внешним функциям обратного вызова включает в себя запрос программной врезки. При отключенной (дезактивированной) врезке значение временной переменной iB_TmpMsg_xxx записывается обратно в качестве значения переменной блока управления, причем процесс такой записи обозначен стрелкой 725. При активизированной врезке обратной записи не происходит. Этим обеспечивается развязка переменной блока управления и функции блока управления. Затем осуществляется обозначенный стрелкой 722 возврат к функции блока управления,
Модификация вызовов функций (фиг.8)
Локализация фрагментов кода, содержащих команды загрузки/сохранения, позволяет локализовать в программном коде функцию блока управления, к которой относятся эти команды. Описанная операция осуществляется специально разработанной для осуществления предлагаемого в изобретении способа программой, работающей под управлением операционной системы Windows и позволяющей на основании известного местоположения команд загрузки и сохранения с использованием дополнительной справочной информации определить начальный и конечный адреса функции блока управления.
Затем во всем программном коде все вызовы функции блока управления заменяются на вызовы вновь созданной функции перехвата.
Первоначальный вызов функции блока управления осуществляется внутри указанной функции перехвата.
Приведенная на фиг.8 иллюстрация к процессу модификации вызовов функций для наглядности и облегчения сравнения выполнена во многом аналогичной рассмотренным выше фиг.2, 4, 5, 6 и 7. Позицией 801 обозначен исходный программный код блока управления, а позицией 811 - соответствующий модифицированный программный код. При этом применяется список задач task_list и соответствующая дополнительная функция или подфункция subfunction_x(). Для упрощения на данном чертеже, в отличие, например, от фиг.3-7, не проводится явного различия между собственно последовательностью команд и выполняемыми ими функциями. Позицией 804 обозначен аналогичный описанному со ссылкой на фиг.2 процесс определения адресов функций и их вызовов. На стадии 805 адрес исходной функции function_a заменяется адресом функции перехвата hook_function_a. Аналогичным образом на стадии 806 вызов исходной функции function_a заменяется вызовом функции перехвата hook_function_a. На последующей стадии 807 косвенный вызов исходной функции function_a заменяется вызовом функции перехвата hook_function_a, в данном примере представленным в виде 32-битной инструкции. Буквами nP обозначен новый, иными словами полученный в результате модификаций, программный код.
Способ составления дополнительного программного кода (фиг.9)
Для каждой функции блока управления, в которой находится врезка, может быть создана или создается функция перехвата. На схеме, изображенной на фиг.9, такие функции перехвата обозначены как hook_function_a() и hook_function_x(). При этом позицией 901 обозначен программный код блока управления. Позицией 902 обозначена область памяти, выделенная для дополнительного программного кода. Позицией 903 обозначены собственно функции перехвата, в которых прямоугольником 904 обозначена необязательно необходимая операция инициализации необязательно необходимых переменных-указателей. Позицией 905 обозначен программный код для программных врезок, обеспечивающих возможность конфигурации и связи прежде всего с функциями эмуляции, используемыми в методах быстрого прототипирования. Позицией 906 обозначен вызов исходной функции iunction_a() блока управления. Вторая внешняя функция hook_function_x() перехвата устроена по такому же принципу, но для упрощения подробно не показана.
Иными словами, функция перехвата содержит механизм программных врезок, управляющий доступом к методу быстрого прототипирования через данные приложения. Помимо этого функцией перехвата по мере необходимости обеспечивается инициализация переменных-указателей, а также вызов исходной функции блока управления.
Ниже более подробно описаны особенности функций перехвата в зависимости от применяемого способа интеграции в программу программных врезок.
К методам 1 и 2:
Перед применением команды сохранения к переменной блока управления, адресованной посредством указателя, необходимо предварительно адресовать (инициализировать) переменную-указатель адресом переменной. Инициализация указателя осуществляется функцией перехвата. При неактивном режиме динамического обращения к внешней функции обратного вызова указатель инициализируется адресом переменной блока управления. При активизированном механизме доступа посредством программных врезок указатель инициализируется адресом временной переменной инструментальной среды DHooks. В этой точке, например, при косвенной адресации переменной блока управления происходит "переадресация" доступа в режиме записи на временную переменную.
К методам 3 и 4:
Оба указанных метода предусматривают прямую адресацию переменной блока управления. Подлежащие инициализации указатели при этом не используются. В функции перехвата содержатся механизм управления программной врезкой и вызов исходной функции блока управления.
Эту функцию не следует путать с функцией расширенного динамического обращения к внешним функциям обратного вызова. Назначение последней подробно рассмотрено в приведенном выше описании. В случае, когда для обеспечения возможности динамического обращения к функциям обратного вызова необходима модификация в том числе и 32-разрядных команд сохранения, необходимо использовать дополнительный программный код. Этот программный код формируется инструментальной средой DHooks и обозначается термином "функция расширенного динамического обращения к внешним функциям обратного вызова". Функции расширенного динамического обращения к внешним функциям обратного вызова содержат дополнительные механизмы инициализации, копирования и динамического обращения к внешним функциям обратного вызова и представляют собой программные функции, расширяющие возможности динамического обращения к указанным внешним функциям. Использование функций расширенного динамического обращения к внешним функциям обратного вызова предусматривается предлагаемыми в изобретении методами 2, 3 и 4 интеграции в программу программных врезок.
Способ интеграции программных врезок
Интеграция в программу предлагаемого в изобретении кода программных врезок осуществляется путем слияния фрагментов шестнадцатеричного кода. В процессе такого слияния разработанный средствами инструментальной среды код, обеспечивающий возможность динамического обращения к внешним функциям обратного вызова, копируется в свободные области шестнадцатеричного кода исходной программы. Описанный способ аналогичен применяемому при внутренней эмуляции блока управления способу объединения друг с другом шестнадцатеричных данных, полученных в результате двух различных циклов разработки программного обеспечения.
Сегментация областей памяти (фиг.10)
Для осуществления предлагаемого в изобретении способа интеграции в исходную программу программных врезок в средстве хранения данных при распределении памяти S1 программы блока управления необходимо предусмотреть отдельные области памяти. Как показано на фиг.10, для осуществления указанного способа должны быть выделены свободные области S4, S3 и S2 памяти для кода (кода инструментальной среды DHook), данных (данных инструментальной среды DHook) и памяти с произвольной выборкой (памяти с произвольной выборкой инструментальной среды DHook) соответственно.
В предназначенной для кода области памяти хранятся соответствующие изобретению функции (дополнительный программный код), а в предназначенной для данных области памяти - значения переменных для управления механизмами динамического доступа. Необходимые для осуществления предлагаемого в изобретении способа переменные-указатели и административные переменные управления памятью с произвольной выборкой хранятся в отведенной для таких переменных свободной области памяти с произвольной выборкой.
Процесс разработки программного кода (фиг.11)
Разработка программного кода, обеспечивающего возможность динамического обращения к внешним функциям обратного вызова, осуществляется автоматически, средствами специально разработанной для осуществления предлагаемого в изобретении способа инструментальной среды, а сам процесс разработки наглядно показан на фиг.11. При этом осуществляемый на поз. 8 выбор переменных может осуществляться автоматически по заданным критериям.
Позицией 1 на указанном чертеже обозначен шестнадцатеричный файл, содержащий машинный код, например в формате Intel-Hex или Motorola-S19. Позицией 2 обозначен файл описания данных исходной программы, содержащий, например, адреса и формулы конвертации переменных и параметров. Позицией 3 обозначен двоичный файл ELF, представляющий собой выходной файл компоновщика и содержащий адресную информацию, относящуюся к функциям и переменным. Позицией 4 обозначена программа для конвертации машинного кода в ассемблерный или близкий к нему исходный текст. Позицией 5 обозначен прошедший указанное преобразование программный код, используемый системой моделирования в качестве входных данных. Позицией 6 обозначен конвертер, обеспечивающий относящуюся к программе информацию. Позицией 7 обозначена справочная база данных, служащая для разрешения открытых ссылок. Позицией 8 обозначен пользователь, выбирающий переменные, для которых предполагается предусмотреть возможность их определения внешними функциями обратного вызова. Позицией 9 обозначена информация о выбранных пользователем переменных. Позицией 10 обозначена программа моделирования, последовательно считывающая все коды операции и проверяющая содержимое регистров. Позицией 11 обозначен автоматически формируемый исходный код, включающий программный код для динамического доступа к внешним функциям обратного вызова, дополнительные функции и информацию о подлежащих модификации фрагментах кода исходной программы. Позицией 12 обозначена среда разработки программ (инструментальная среда), управляющая всеми процессами создания шестнадцатеричного кода и программных данных. Позицией 13 обозначены программные данные, служащие для управления динамическим доступом к внешним функциям обратного вызова. Позицией 14 обозначены программный код + дополнительный программный код для динамического доступа к внешним функциям обратного вызова + дополнительная информация для объединения одного с другим. Позицией 15 обозначен процесс слияния указанных элементов, иными словами собственно интеграции в код исходной программы разработанных средствами инструментальной среды функций перехвата. Позицией 16 обозначен файл описания данных модифицированной программы, содержащий как собственно программные данные, так и данные по управлению динамическим доступом к внешним функциям обратного вызова. И, наконец, позицией 17 обозначена готовая модифицированная программа с интегрированными в нее программными врезками.