Вот ее прототип:
typedVar( string moduleName, string typeName, long address )
moduleName - имя модуля, содержащего тип
typeName - имя типа переменной
address - виртуальный адрес переменной
Функция создает объект типа typedVarClass и динамически добавляет ему аттрибуты, с именами соответствующими именам полей структуры заданного типа. Если поле является сложным типом - операция повторяется рекурсивно. В результате, мы в python е получаем объект, с которым можем работать в той же манере, как и в Си:
p = typedVar( "nt", "_ETHREAD", threadAddr )
print "Wait time: %d" % p.Tcb.WaitTime
print p.Tcb.Alerted[1]
Вот ее прототип:
typedVarList( long head_address, string moduleName, string typeName, fieldName)
head_address - адрес головы списка
moduleName - имя модуля, содержащего тип элемента списка
typeName - имя типа элемента списка
fieldName - имя поля, содержащего указатель на следующий элемент списка.
Функция возвращает питоновский лист, каждый элемент которого имеет тип typedVarClass. Соответственно, для элементов этого списка справедливо все, что сказано выше. Проиллюстрируем на примере, как это работает:
nt = loadModule( "nt" )
processList = typedVarList( nt.PsActiveProcessHead, "nt", "_EPROCESS", "ActiveProcessLinks" )
for process in processList:
dprintln( "".join( [ chr(i) for i in process.ImageFileName.values() ] ) )
Третья полезная функция для работы с переменными: containingRecord. Это аналог макроса CONTAINING_RECORD.
Вот ее прототип:
containingRecord( long field_address, string moduleName, string typeName, fieldName)
field_address - адрес поля структуры.
moduleName - имя модуля, содержащего тип
typeName - имя типа элемента списка
fieldName - имя поля, адрес которого задан переменной field_address
Битовые поля
Функция typedVar не поддерживает работу с битовымии полями в полном объеме. Если в структуре объявлено битовое поле:struct A {
int a : 10;
int b : 20;
};
Комментариев нет:
Отправить комментарий