понедельник, 17 января 2011 г.

Release 0.0.14

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

В класс typedVarClass добавлен метод получения аттрибутов __getattr__. Получение аттрибута трактуется как вычисление адреса переменной(функции) модуля.
Сравните два фрагмента кода. В старой редакции для получения адреса переменной необходимо было явно вызывать функцию getOffset:

# Old version
nt = loadModule( "nt" )
nt.PsActiveProcessHead = getOffset( "nt", "PsActiveProcessHead" )
processList = typedVarList( nt.PsActiveProcessHead, "nt", "_EPROCESS", "ActiveProcessLinks" )

Теперь в этом нет нужды, при обращении к аттрибуту экземпляра класса модуля, эта функция будет вызвана автоматически

# New version
nt = loadModule( "nt" )
#nt.PsActiveProcessHead = getOffset( "nt", "PsActiveProcessHead" )
processList = typedVarList( nt.PsActiveProcessHead, "nt", "_EPROCESS", "ActiveProcessLinks" )

При использовании команды !pycmd часто возникает желание распечатать содержимое переменной, полученной через вызов typedVar. До этого единственным способом было явное обращение к аттрибутам ( соответствующим полям стурктуры ). Оператор print - не работал. Поэтому в класс typedVarClass был добавлен метод __str__, возвращающий текстовое представление класса:

p = typedVarList( "nt", "_EPROCESS", processAddr )
print p

Комментариев нет:

Отправить комментарий