Thunk's

From
Andry Ivanov (2:5030/53.152)
To
All ()
Date
1996-05-29T11:38Z
Area
SU.WINDOWS.PROG
Hi All!

Уважаемые специалисты по написанию и чтению subj-ей.
Только-что с большим интересом в который раз просмотрел
файл OWL.CPP из исходников OWL 5.0 ( впрочем по сравнению
с 2.x он слабо изменился). Есть там функция, которая генерит
этот самый thunk. Причем присутствует она в двух экземплярах -
для Win16  и для Win32.

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

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

- Win32 вариант действует просто и прямолинейно, Распределяет память
по new,забивает чем надо и предлагает выполнять. Чего выделил нигде
не запоминает, поскольку thunk станет потом WNDPROC. Когда надо
освободить экземпляр - приводит WNDPROC к указателю на структуру,
которой он и был раньше, и ничтоже сумняшеся delete ее.

- Win16 во первых все чего наделал хранит внутри себя, во вторых
данные выполнять не дает, а вместо этого создает алиасный селектор
с помощью PrestoChangoSelector() и от него уже генерит thunk.
И освобождает все посредством FreeSelector.

Зачем сложности в Win16 вроде написано прямо в коде - нельзя данные выполнять.

Логичный вывод - если в Win32 сложностей нет, значит то, что
Borland распределяет по new выполнять можно. То есть хочешь
- выполняй как код, хочешь - удаляй как данные?

Так это или нет?

И где Borland выделяет эту память? В умолчаемой куче процесса или
свою создает?


С уважением, Andry

--- Дед-нудист 2.42.G0214+
 * Origin: Мир несовершенен (2:5030/53.152)