Способ определения ошибочного использования памяти



Способ определения ошибочного использования памяти
Способ определения ошибочного использования памяти

 


Владельцы патента RU 2458386:

Корпорация "САМСУНГ ЭЛЕКТРОНИКС Ко., Лтд." (KR)

Изобретение относится к способам определения ошибочного использования памяти. Технический результат заключается в увеличении точности определения ошибок в памяти. Выполняют следующие операции: шаг 1 - запускают компьютерную систему с требуемой программой и средством мониторинга, выполненным с возможностью сбора всех обращений к памяти во время выполнения программы; шаг 2 - определяют с помощью средства мониторинга обращение к памяти, при этом извлекают, используя отладочную информацию программы, строку кода, которая запрашивает доступ к данному адресу памяти, и набор переменных, к которым может быть осуществлен доступ при данном обращении к памяти; шаг 3 - после выполнения программы извлекают, используя информацию об исходном коде, для каждой строки исходного кода набор переменных, к которым возможен доступ; шаг 4 - определяют ошибки использования памяти путем сравнения результатов выполнения шагов 2 и 3, при этом определяют обращение к памяти как ошибочное в случае, если к области памяти, которая соответствует данной переменной, в данной точке выполнения программы был осуществлен доступ, но в соответствии с исходным кодом, доступ к данной переменной невозможен в данный момент выполнения программы. 2 ил.

 

Изобретение относится к области обработки данных в компьютерных системах, а именно к способам определения ошибочного использования памяти, и может применяться для автоматического определения типичных ошибок памяти (таких как переполнение буфера, включая переполнение буфера внутри структуры и случай, когда два размещенных объекта перезаписываются один на другой; неправомерный доступ и т.д.) в компьютерных программах.

В настоящее время работа по отладке программы, выполняемой в компьютерной системе, становится более и более затратной по времени, поскольку современные компьютерные системы имеют все более и более сложное поведение. Для уменьшения усилий разработчика по отладке программы разработано несколько подходов и способов. Эти способы могут быть разделены на две основные категории: способы статического анализа и способы динамического анализа. Способы обеих категорий могут быть использованы для определения широкого набора проблем. Однако способы каждой категории имеют свои недостатки, которые делают данные способы бесполезными для наиболее распространенных и трудно детектируемых проблем, таких как неверное использование памяти.

Способы динамического анализа основаны на информации, поступающей во время выполнения программы. С помощью этих способов можно легко определить неверные обращения к памяти, которые находятся вне диапазона размещения. Тем не менее данные способы бесполезны в случае ошибок, при которых два размещенных объекта записываются один поверх другого или происходит переполнение буфера внутри размещенной структуры.

Способы статического анализа основаны на исследовании исходного кода. Данные способы не могут обнаружить все проблемы памяти из-за невозможности осуществления достаточно точного анализа потока данных для больших компьютерных систем.

Известен способ определения в реальном времени неправильного использования размещения памяти нулевой длинны (см. выложенную заявку на патент США №20070136547) [1], в котором описан способ улучшения процесса отладки стандартной программы, которая некорректно выполняет размещение памяти нулевой длины.

Недостаток данного способа заключается в том, что он определяет только размещение памяти нулевой длины, при этом наиболее сложные ошибки доступа к памяти, такие как переполнение буфера и неправомерный доступ к памяти, не могут быть определены данным способом.

В выложенной заявке на патент США №20080052468 [2] предложен способ определения ошибок переполнения памяти во время выполнения программы. Определение таких ошибок производят за счет защиты памяти, к которой нет доступа из-за «обстоятельств, связанных с переполнением памяти» (доступ к неразмещенной памяти; доступ к стеку памяти, который находится вне области стека и т.д.).

Недостаток данного способа состоит в невозможности определения неверного обращения к памяти, которая размещена (например, в случае, когда объект перезаписывается во время обращения к другому объекту).

Наиболее близким к заявленному изобретению является описанный в выложенной заявке на патент США №20050144410 [3] способ определения неверного использования памяти, выделенной динамически, который основан на заполнении памяти в хвосте размещенной области определенной величиной и проверке данной величины во время выполнения программы или после окончания ее выполнения. Данный способ выбран в качестве прототипа заявленного изобретения.

Недостатки способа-прототипа заключаются в следующем. Во-первых, он имеет очень узкую область применения: определяет только ошибочное использование памяти, выделенной динамически (сегменты стека и данных не могут быть проверены данным способом). Во-вторых, данным способом можно определить ошибки внутри предопределенной области памяти, но нельзя определить ошибки памяти, если система получает доступ к памяти вне данной области (например, когда объект перезаписывается во время обращения к другому объекту).

Задачей заявленного изобретения является создание более точного способа определения ошибочного использования памяти, в частности, посредством применения средства мониторинга, а именно, за счет использования средства динамического анализа для детектирования обращений к памяти, отладочной информации программы для определения, к какой именно переменной осуществляется доступ при текущем обращении к памяти, и информации об исходном коде программы для определения, к каким именно переменным возможен доступ в данной строке кода.

Технический результат достигается за счет разработки усовершенствованного способа, основанного на совместном применении статических и динамических подходов.

Способ определения ошибочного использования памяти, заключающийся в выполнении следующих операций:

шаг 1 - запускают компьютерную систему с требуемой программой и средством мониторинга, выполненным с возможностью сбора всех обращений к памяти во время выполнения программы;

шаг 2 - определяют с помощью средства мониторинга обращение к памяти, при этом извлекают, используя отладочную информацию программы, строку кода, которая запрашивает доступ к данному адресу памяти, и набор переменных, к которым может быть осуществлен доступ при данном обращении к памяти;

шаг 3 - после выполнения программы извлекают, используя информацию об исходном коде, для каждой строки исходного кода набор переменных, к которым возможен доступ;

шаг 4 - определяют ошибки использования памяти путем сравнения результатов выполнения шагов 2 и 3, при этом определяют обращение к памяти как ошибочное в случае, если к области памяти, которая соответствует данной переменной, в данной точке выполнения программы был осуществлен доступ, но в соответствии с исходным кодом, доступ к данной переменной невозможен в данный момент выполнения программы.

Таким образом, заявленный способ позволяет определить неправильное использование памяти в широком диапазоне, такое как проблема переполнения буфера (включая случай, когда два размещенных объекта записываются один поверх другого или когда происходит переполнение буфера внутри размещенной структуры). В результате выполнения заявленного способа получают исходную строку, когда происходит неправильный доступ к памяти. Используя данную информацию, разработчик может простым способом найти причину неправильного поведения компьютерной системы, которое связано с использованием памяти.

Для лучшего понимания заявленного изобретения далее приводится его подробное описание с соответствующими чертежами.

Фиг.1 - пошаговая схема выполнения способа определения ошибочного использования памяти согласно изобретению по сравнению со способами, известными из уровня техники.

Фиг.2 - схема выполнения способа определения ошибочного использования памяти в компьютерной системе согласно изобретению.

Рассмотрим выполнение заявленного способа в компьютерной системе (Фиг.2), содержащей память 1 и средство мониторинга, выполненное в виде средства 2 динамического анализа (DAT - Dynamic Analysis Tool), которое содержит детектор 3 строки кода (CRD - Code Line Detector), детектор 4 набора реально запрошенных переменных (RAVSD - Real Accessed Variables Set Detector), детектор 5 набора возможных запрошенных переменных (SAVSD), детектор 6 ошибки памяти (MED - Memory Error Detector), базу данных 7 (DB - database) и детектор 8 доступов к памяти.

Запускают компьютерную систему с требуемой программой и средством мониторинга, а именно средством 2 динамического анализа. Собирают информацию об адресах запрошенной памяти 1 во время выполнения программы путем использования средства 2 динамического анализа, при этом в средстве 2 динамического анализа применяют технологию динамической инструментации, которая позволяет перехватывать все обращения к памяти 1 во время выполнения программы. Обычно в подходах динамической инструментации для определения обращений к памяти заменяют все инструкции обращений к памяти на вызов обработчика данного события. Однако заявленный способ может быть применен для любой технологии динамической инструментации, которая позволяет перехватывать все доступы к памяти.

При обнаружении доступа к памяти 1 запрашивают детектор 3 строки кода. Данный модуль извлекает строку кода, в которой запрашивается доступ по данному адресу памяти, путем использования отладочной информации программы. В результате обработки в детекторе 3 строки кода, строку, которая обеспечивает обращение к памяти 1 во время выполнения программы, сохраняют в базу данных 7. Таким образом, в базе данных 7 сохраняют все исходные строки, которые обеспечивают доступ к памяти 1 во время выполнения программы.

Дополнительно, когда определяют доступ к памяти 1, вызывают детектор 4 набора реально запрошенных переменных. Детектор 4 набора реально запрошенных переменных извлекает набор переменных, к которым может быть осуществлен доступ в течение данного обращения к памяти 1, путем использования отладочной информации. В результате обработки в детекторе 4 набора реально запрошенных переменных, исходной строке, обеспечивающей доступ к памяти 1 (на выходе детектора 3 строки кода), сопоставляют ссылку на набор переменных и сохраняют в базу данных 7. В случае доступа к памяти 1, которая не была размещена, список доступных переменных пуст.

На стадии обработки после выполнения программы детектор 5 набора возможных запрошенных переменных получает на вход данные с выхода детектора 3 строки кода (все исходные строки, которые обеспечивают доступ к памяти 1 во время выполнения программы). Для каждой исходной строки детектор 5 набора возможных запрошенных переменных извлекает набор переменных, к которым может быть осуществлен доступ на основе информации об исходном коде. Детектор 5 набора возможных запрошенных переменных использует технологии анализа потока данных для извлечения этой информации (анализ наложения и т.д.). Результатом обработки в детекторе 5 набора возможных запрошенных переменных является набор переменных, доступ к которым может быть осуществлен в соответствии с исходной программой. Результату обработки в детекторе 5 набора возможных запрошенных переменных сопоставляют ссылку на строку исходного кода, которая обеспечивает доступ к памяти 1 (выход детектора 3 строки кода), и сохраняют данный результат в базе данных 7.

Средство 2 динамического анализа вызывает детектор 6 ошибки памяти, обрабатывает каждую строку, которая обеспечивает доступ к памяти 1 и сравнивает два набора: с выхода детектора 4 набора реально запрошенных переменных и с выхода детектора 5 набора возможных запрошенных переменных. Если существует переменная, которая присутствует на выходе детектора 4 набора реально запрошенных переменных, но не присутствует на выходе детектора 5 набора возможных запрошенных переменных, тогда детектор 6 ошибки памяти сообщает об ошибке.

Заявленный способ обладает большей точностью определения ошибок памяти по сравнению с известными способами, основанными на информации, получаемой только во время выполнения программы, или только на информации об исходном коде. Например, следующие ошибки не могут быть определены в случае использования только информации, получаемой во время выполнения программы: переполнение буфера в стеке или в сегменте данных; переполнение буфера в размещенных структурах; два размещенных объекта перезаписывают один на другой. Определение таких ошибок путем применения только анализа статического исходного кода ограничено, поскольку статический анализ исходного кода является NP-полной проблемой.

Заявленный способ имеет только одно ограничение: в случае, если в одной строке исходного кода используют несколько переменных и осуществляют доступ к одной из них, посредством заявленного способа нельзя различить, является ли это ошибочным обращением к памяти или нет. Для преодоления данного ограничения требуется более сложный анализ двоичного и исходного кода.

Следует иметь ввиду, что указанный выше вариант выполнения изобретения был изложен лишь с целью иллюстрации настоящего изобретения, специалистам должно быть ясно, что возможны разные модификации, добавления и замены, не выходящие из объема и смысла настоящего изобретения, раскрытого в прилагаемой формуле изобретения.

Способ определения ошибочного использования памяти, заключающийся в выполнении следующих операций:
шаг 1 - запускают компьютерную систему с требуемой программой и средством мониторинга, выполненным с возможностью сбора всех обращений к памяти во время выполнения программы;
шаг 2 - определяют с помощью средства мониторинга обращение к памяти, при этом извлекают, используя отладочную информацию программы, строку кода, которая запрашивает доступ к данному адресу памяти, и набор переменных, к которым может быть осуществлен доступ при данном обращении к памяти;
шаг 3 - после выполнения программы извлекают, используя информацию об исходном коде, для каждой строки исходного кода набор переменных, к которым возможен доступ;
шаг 4 - определяют ошибки использования памяти путем сравнения результатов выполнения шагов 2 и 3, при этом определяют обращение к памяти как ошибочное в случае, если к области памяти, которая соответствует данной переменной, в данной точке выполнения программы был осуществлен доступ, но в соответствии с исходным кодом доступ к данной переменной невозможен в данный момент выполнения программы.



 

Похожие патенты:

Изобретение относится к области защиты информации и оптимизации режимов функционирования программного обеспечения, и может быть использовано в домашних персональных компьютерах, серверах, а также ЭВМ, применяемых на производстве.

Изобретение относится к технологиям для антивирусной проверки скачиваемых из сети данных на стороне сервера. .

Изобретение относится к вычислительной технике, а именно к технике защиты информации на цифровых накопителях информации. .

Изобретение относится к вычислительной технике, а именно к способам области защиты компьютерного программного обеспечения. .

Изобретение относится к системам объединения вирусной проверки и репликационной фильтрации. .

Изобретение относится к вычислительной технике и предназначено для контроля целостности файлов. .

Изобретение относится к некриптографическим способам контроля целостности файлов и может быть использовано при создании программного обеспечения, при контроле целостности исходных текстов программного обеспечения, в том числе при проведении сертификационных испытаний программного обеспечения на отсутствие недекларированных возможностей.

Изобретение относится к информационным вычислительным системам и сетям. .

Изобретение относится к обрабатывающему устройству и к способу самоуправления обрабатывающего устройства

Изобретение относится к программируемым элементам памяти, к способам и устройствам для их считывания, записи и программирования

Изобретение относится к вычислительной технике

Изобретение относится к антивирусным системам для обнаружения вредоносных объектов, загружаемых через пиринговые сети

Изобретение относится к вычислительной технике а, именно к способу восстановления данных в системе управления базами данных - СУБД. Техническим результатом является повышение точности восстановления данных в базах данных (БД) СУБД до последнего по времени согласованного состояния БД, не требуя при восстановлении дополнительного объема оперативной и внешней памяти под журнализацию. Заявлен способ восстановления данных в системе управления базами данных - СУБД. БД сформированы в виде реляционных таблиц, каждая из которых описывается метаданными и содержит данные, сформированные в строки одинаковой структуры, где каждая строка идентифицирована уникальным номером и представлена набором полей с заданными типами данных. Способ включает в себя этап, на котором формируют единый журнал, состоящий из определяемого пользователем числа файлов заданного размера, среди которых формируют в том числе записи, каждая из которых описывает redo-обновление только на одной странице одной из таблиц БД и предназначена для доката обновления в БД, которое не было записано во внешнюю память. Далее, согласно способу, выполняют откаты всех незавершенных транзакций на логическом уровне. Рестарт выполняют в три прохода: аналитический, redo-проход, undo-проход. 3 з.п. ф-лы, 6 ил.

Изобретение относится к системам резервирования данных. Техническим результатом является уменьшение задержки и потребления ширины полосы частот за счет того, что данные, необходимые для осуществления восстановления, доступны для клиента из глобального сетевого местоположения (облака), а также из одного или более одноранговых устройств. Предложена клиентская система, предназначенная для восстановления информации из сетевой системы резервирования, содержащая память и процессор, которые соответственно выполнены с возможностью хранить и исполнять команды. Заявленная система включает в себя разностный компонент, компонент определения местоположения, компонент восстановления. Разностный компонент сконфигурирован идентифицировать, для элемента данных, который должен быть восстановлен, одну или более частей элемента данных, которые являются разными между текущей версией элемента данных и целевой версией элемента данных, на основе как первой разности, вычисляемой в клиентской системе, между текущей версией элемента данных и целевой версией элемента данных, так и второй разности, вычисляемой в местоположении резервирования, которое является удаленным по отношению к клиентской системе, между текущей версией элемента данных и целевой версией элемента данных. 3 н. и 17 з.п. ф-лы, 12 ил.
Изобретение относится к вычислительной технике. Технический результат заключается в снижении вероятности потери «грязных» данных при отказе одного из контроллеров. Способ контроля корректности записи данных в двухконтроллерной системе хранения данных на массиве энергонезависимых носителей, включающей первый и второй контроллеры, каждый из которых содержит кэш в оперативной памяти, разделенный на сегменты, в котором: записывают данные, полученные от инициатора, в кэш первого контроллера, при этом записанные в кэш данные помечаются как «грязные»; рассчитывают в кэше первого контроллера контрольную сумму полученных данных и хранящихся в кэше других «грязных» данных; передают полученные от инициатора данные из первого контроллера в кэш второго контроллера, при этом записанные в кэш данные помечаются как «грязные»; рассчитывают в кэше второго контроллера контрольную сумму полученных «грязных» данных и хранящихся в кэше других «грязных» данных; передают контрольную сумму, рассчитанную в первом контроллере, во второй контроллер; сравнивают во втором контроллере контрольные суммы первого и второго контроллеров; передают из второго контроллера в первый контроллер результат сравнения контрольных сумм; при совпадении контрольных сумм принимают решение о корректности завершения операции синхронизации данных. 2 н. и 12 з.п. ф-лы, 3 ил.
Наверх