хрень какая-то творится с этим мощным проектом - те dynamorio.dll, которые они раздают тут под видом версии 2.2.0.2 не соответствуют сорцам из их svn
Например в svn явно есть поддержка AVX (см. например core\x86\decode_table.c), а в dll имен этих мнемоник нет
Никто не пробовал сам его собирать ?
Update: проект мне понравился например тем что таблица импорта содержит исключительно ntdll. Что делает его пригодным например в написании собственного shimа и теоретически даже возможен порт в нулевое кольцо
четверг, 30 июня 2011 г.
спам пришел
давеча
С интересом жду предложений пройти детектор лжи и колоноскопию например, бгг
Учебный Центр Luxoft приглашает Вас зарегистрироваться на Facebookинтересно сколько им пробашлял цукенберг ?
С интересом жду предложений пройти детектор лжи и колоноскопию например, бгг
среда, 29 июня 2011 г.
udis86 with ssse3 & sse4
а вот например как всем известно последняя версия udis86 не поддерживает ssse3 & sse4 совершенно официально
Первая моя наивная попытка добавить их самостоятельно провалилась с позором. Например пишем в x86optable.xml скажем для
компилируем и смотрим itab.c
И например видим что дескрипторы для инструкции попали в таблицы ud_itab_entry itab__0f & itab__pfx_sse66__0f
Впрочем такой вариант тоже не работает:
Похоже что текущая реализация opgen.py не поддерживает opcodes длиннее 3х байт. Добавить же нужно следующие инструкции
Первая моя наивная попытка добавить их самостоятельно провалилась с позором. Например пишем в x86optable.xml скажем для
psignb что-нть такое:
<instruction mnemonic="psignb">
<opcode> aso rexr rexx rexb ; sse66 0f 38 08 ; V W </opcode>
<opcode> aso rexr rexx rexb ; 0f 38 08 ; P Q </opcode>
</instruction>
компилируем и смотрим itab.c
И например видим что дескрипторы для инструкции попали в таблицы ud_itab_entry itab__0f & itab__pfx_sse66__0f
Впрочем такой вариант тоже не работает:
<instruction mnemonic="psignb">
<opcode> aso rexr rexx rexb ; sse66 0f sse38 08 ; V W </opcode>
<opcode> aso rexr rexx rexb ; 0f sse38 08 ; P Q </opcode>
</instruction>
Похоже что текущая реализация opgen.py не поддерживает opcodes длиннее 3х байт. Добавить же нужно следующие инструкции
вторник, 28 июня 2011 г.
xbyak
заюзал сегодня кодогенератор с совершенно непроизносимым именем от епонцев
умеет 32 & 64 бита и полный фарш - mmx/sse/sse2/sse3/ssse3/sse4/avx - под linux/mingw/vs2008/vs2010
вроде даже работает, несмотря на FPU (partially)
Update: опыты показали также что ему неизвестны инструкции invept, invvpid, movbe и AMD-V Virtualization ISA Extension
умеет 32 & 64 бита и полный фарш - mmx/sse/sse2/sse3/ssse3/sse4/avx - под linux/mingw/vs2008/vs2010
вроде даже работает, несмотря на FPU (partially)
Update: опыты показали также что ему неизвестны инструкции invept, invvpid, movbe и AMD-V Virtualization ISA Extension
суббота, 25 июня 2011 г.
сломал голову
как известно под лучшей в мире операционной системой код может быть
Тут все просто и очевидно - первый template задает размерность, второй - сhar или wchar_t. Метод get_format_string зовется из somefunction для получения правильных форматных строк для printf например. Заметьте при этом что сам get_format_string не имеет аргументов типа W и вообще служит исключительно для специализации:
Это компилируется.
Проблема возникает при попытке определить частично специализированный метод get_format_string. Например такое не работает:
при компиляции возникает ошибка C2768
И как же будет правильно специализировать такой метод шаблонного класса ?
Update: гугл говорит нам что "частичная специализация шаблонной функции шаблонного класса в чистом виде невозможна" и предлагает использовать костыли в виде traits и прочую boostоподобную упячку. Реальность однако подсказывает что вот такой код, вставленный внутри определения класса, вполне даже работает:
vs2008 есличо
У меня есть подозрения что главная гордость с++ - шаблоны - на самом деле реализованы в нем крайне черезжопу анус мертвого страуса
- 32 или 64 битным
- ASCII или Unicode
template <typename T>
class someclass
{
public:
template <typename W> void somefunction(const W* filename);
private:
template <typename W> const char *get_format_string(int index) const;
};
Тут все просто и очевидно - первый template задает размерность, второй - сhar или wchar_t. Метод get_format_string зовется из somefunction для получения правильных форматных строк для printf например. Заметьте при этом что сам get_format_string не имеет аргументов типа W и вообще служит исключительно для специализации:
template <typename T>
template <typename W>
void someclass<T>::somefunction(const W *filename)
{
...
// вызываем get_format_string
printf(get_format_string<W>(FORMAT_INDEX1), args);
}
Это компилируется.
Проблема возникает при попытке определить частично специализированный метод get_format_string. Например такое не работает:
template <typename T>
template <>
const char *someclass<T>::get_format_string<char>() const
при компиляции возникает ошибка C2768
И как же будет правильно специализировать такой метод шаблонного класса ?
Update: гугл говорит нам что "частичная специализация шаблонной функции шаблонного класса в чистом виде невозможна" и предлагает использовать костыли в виде traits и прочую boostоподобную упячку. Реальность однако подсказывает что вот такой код, вставленный внутри определения класса, вполне даже работает:
template <typename W>
const char *get_format_string(int index) const;
template <>
const char *get_format_string<wchar_t>(int index) const
{
// тело специализированного метода например
}
vs2008 есличо
У меня есть подозрения что главная гордость с++ - шаблоны - на самом деле реализованы в нем крайне через
среда, 22 июня 2011 г.
patched udis86
пока отдельные альтернативно-одаренные граждане ждут "форка на github чтобы может быть присоединиться" (бгг) я выложил все что накорябал в udis86 на проклятый sourceforge например
Изменений не особо дофига:
добавлены opcodes для
Для добавления ssse3/sse4 нужно править схему декодера, который в настоящее время не поддерживает 4х байтные opcodes, что довольно долго и ресурсоемко (особенно верификация добавленного)
И да - на сайте udis86 творится полный бардак. Например вот этот xml местами не соответствует docs/x86optable.xml
Изменений не особо дофига:
добавлены opcodes для
- getsec
- paddd
- popcnt
- vmlaunch
- vmread
- vmwrite
- xgetbv
- xsetbv
- xrstor
- xsave
Для добавления ssse3/sse4 нужно править схему декодера, который в настоящее время не поддерживает 4х байтные opcodes, что довольно долго и ресурсоемко (особенно верификация добавленного)
И да - на сайте udis86 творится полный бардак. Например вот этот xml местами не соответствует docs/x86optable.xml
Подписаться на:
Сообщения (Atom)