ПРОГРАММНО-РЕАЛИЗОВАННАЯ ТРАНЗАКЦИОННАЯ ЗАЩИТА УПРАВЛЯЕМЫХ УКАЗАТЕЛЕЙ

1. Способ обеспечения программно-реализованной транзакционной защиты управляемых указателей, содержащий этапы, на которых:
определяют во время компиляции, что, по меньшей мере, в одном компилируемом сегменте кода имеется одна или более переменных, передаваемых по ссылке на отдельно компилируемые сегменты кода (204);
выбирают, по меньшей мере, одну методику для передачи источников переменных, передаваемых по ссылке (206);
модифицируют, по меньшей мере, один сегмент кода, чтобы реализовать выбранную методику (208); и
создают исполняемый модуль, используя модифицированный сегмент кода (208).
2. Способ по п.1, в котором, по меньшей мере, одна методика представляет собой методику дополнения by-ref (232), и эта методика содержит следующие этапы:
создают новый тип информации by-ref, содержащий информацию, необходимую для различения разных видов реальных аргументов (234);
для метода, который имеет, по меньшей мере, один аргумент by-ref, изменяют аргумент так, чтобы включить дополнительный аргумент для переменной, используя новый тип информации by-ref (236); и
в области вызова метода, содержащего, по меньшей мере, один аргумент by-ref, вставляют программный код, чтобы присвоить подходящие одно или более значений новому типу информации by-ref, и добавляют тип как аргумент области вызова в вызов метода (238).
3. Способ по п.1, в котором, по меньшей мере, одна методика представляет собой модифицированную методику дополнения by-ref, использующую перечисления и структуры (232), и эта методика содержит следующие этапы, на которых:
выделяют держатель информации by-ref в каждом месте вызова, где задействуют конкретный метод, имеющий ссылочные аргументы, которые необходимо идентифицировать (294); и
передают держатель информации by-ref по ссылке (296).
4. Способ по п.3, в котором держатель информации by-ref является экземпляром из одного из нескольких предварительно заданных типов значений (296).
5. Способ по п.1, в котором, по меньшей мере, одна методика представляет собой методику статического дополнения (352), и эта методика содержит этапы, на которых:
создают глобальную таблицу для хранения статической информации by-ref (354); и
во время компиляции вызова метода, принимающего один или более аргументов by-ref, добавляют записи статической информации by-ref в глобальную таблицу, описывающие реальные аргументы для одного или более аргументов by-ref для извлечения в дальнейшем (356).
6. Способ по п.5, дополнительно содержащий этап, на котором:
при прогоне, когда выполняется метод и встречается обращение с использованием аргумента by-ref, индексируют глобальную таблицу, чтобы обнаружить статическую информацию by-ref (360).
7. Способ по п.6, в котором индексирование обеспечивают за счет знания адреса команды, задействующей метод (360).
8. Способ по п.1, в котором, по меньшей мере, одна методика содержит множество методик, используемых в комбинации (296).
9. Способ по п.1, в котором методику выбирают из группы, состоящей из методики дополнения by-ref, модифицированной методики дополнения by-ref и методики статического дополнения (206).
10. Компьютерно-читаемый носитель, содержащий исполняемые компьютером команды, обеспечивающие выполнение компьютером этапов, указанных в п.1.
11. Способ обеспечения программно-реализованной транзакционной защиты управляемых указателей, содержащий этапы, на которых:
определяют, что необходимо использовать методику статического дополнения, чтобы при необходимости сделать возможным восстановление источника конкретного ссылочного аргумента (352);
во время компиляции создают статическую структуру данных для хранения статической информации by-ref о конкретном ссылочном аргументе (356);
создают глобальную таблицу для хранения статической информации by-ref (354); и
при компиляции вызова метода, принимающего конкретный ссылочный аргумент, добавляют записи статической информации by-ref в глобальную таблицу, описывающие реальные аргументы для конкретного ссылочного аргумента для извлечения в дальнейшем.
12. Способ по п.11, дополнительно содержащий этапы, на которых:
во время прогона, когда исполняется метод и встречается обращение, включающее конкретный ссылочный аргумент, определяют адрес места вызова, задействующего метод, при помощи адреса возврата метода (360).
13. Способ по п.12, в котором адрес возврата используют, чтобы индексировать глобальную таблицу, в которой хранится статическая информация by-ref (360).
14. Способ по п.13, дополнительно содержащий этап, на котором:
определяют местонахождение вызывающего кадра стека, в который вызывающий элемент записал реальную ссылку или другую информацию, описывающую аргумент by-ref при фиксированном известном смещении в этом кадре стека.
15. Компьютерно-читаемый носитель, содержащий исполняемые компьютером команды, обеспечивающие выполнение компьютером этапов, указанных в п.11.
16. Компьютерно-читаемый носитель, содержащий исполняемые компьютером команды, обеспечивающие выполнение компьютером этапов, на которых:
во время компиляции определяют, что существуют первый аргумент и второй аргумент, на которые имеется ссылка в, по меньшей мере, одном компилируемом сегменте кода, чей источник не может быть восстановлен (472);
выбирают, по меньшей мере, одну методику для информирования о первом источнике первого аргумента (474);
выбирают, по меньшей мере, одну методику для информирования о втором источнике второго аргумента, причем вторая методика решает проблему, связанную только со вторым аргументом, но не с первым аргументом (476); и
модифицируют, по меньшей мере, один сегмент кода, чтобы реализовать первую методику для первого аргумента, и реализовать вторую методику для второго аргумента (478).
17. Компьютерно-читаемый носитель по п.16, для которого первая методика реализована с использованием методики статического дополнения (478).
18. Компьютерно-читаемый носитель по п.16, для которого упомянутой проблемой, связанной только со вторым аргументом, является то, что значение второго аргумента неизвестно до прогона (478).
19. Компьютерно-читаемый носитель по п.16, для которого проблему решают, используя методику на основе информации by-ref динамического типа (478).
20. Компьютерно-читаемый носитель по п.16, дополнительно содержащий исполняемые компьютером команды, обеспечивающие выполнение этапа, на котором:
создают исполняемый модуль с использованием модифицированного сегмента кода (480).