Всем привет. Недавно написал проэкт библиотеки диз/ассемблерного движка. На 64-битном ассемблере. Ранее такими вещами не занимался, только пользовался подобными. К библиотеке сделал справку chm. Хотелось-бы увидеть мнения, предложения по улучшению и.т.д. Вот ссылка: http://slil.ru/29235467
Уже думал об этом да всё не успеваю. Все структуры, константы не "устоялись", не "утряслись". Надеюсь к 1.0 версии осилю и их. А пока если не затруднит размещай здесь, хотя-бы и частичный хидер, всё-ж легче, чем с нуля начинать писать.
Сейчас дополнительно могу предложить воспользоваться высоко-уровневыми макросами для внешнего ассемблера ml64. Там есть пролог,эпилог и самодельные .if,.elseif,.while,.repeat,invoke с не сильно отличающимся синтаксисом от оригинальных built-in макросов masm32.
Babyshamble A что так коротко? Не понимаю, что ты имеешь ввиду. Ранее я интересовался подобной библиотекой как раз от этой софтверной корпорации. Вот и топик сохранился: http://www.wasm.ru/forum/viewtopic.php?id=37428
Добавил поддержку 256-битных AVX FMA3 FMA4 XOP инструкций, снова почти по всем SSE прошелся. В общем по количеству уже пожалуй всё. Новую 0.8 версию разместил на домашней странице. http://dsmhelp.narod.ru/
В msdis'е есть все, малопоношеный смокинг, лакей японец, а главное власть, уважение, слава... Там даже арм и проч. микрохерь, и не только х64... Все легко воссоздается через пдб.
Clerk Ну нежен или не очень, но только далеко не всё сразу. У меня и так довольно много сделано, за пол года. Babyshamble Не знаю может я плохо искал. МАЛОПОНОШЕННЫЙ СМОКИНГ ЛАКЕЯ ЯПОНЦА ГЛАВНУЮ ВЛАСТЬ УВАЖЕНИЕ СЛАВУ У ПРОЧ. МИКРОХРЕНЬ. В MSDN не нашел. В Гогле только саму библиотеку получилось найти. Если нет документации, то и как этим пользоваться? ГДЕ? Если только ЛЕГКО, вот может и покажете, что на воссоздавали.
Код не мой, я только разместил объяву: Код (Text): class DISASM; class __declspec(dllimport) __declspec(novtable) DIS { public: friend DISASM; enum DIST{ x0, x1 , x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, ia64, ia32, ia16, amd64 }; enum REGA{ eax,ecx,edx,ebx,esp,ebp,esi,edi }; virtual void Delete(int i = 1) = 0; virtual void u1() = 0; virtual void u2() = 0; virtual void u3() = 0; virtual void u4() = 0; virtual void u5() = 0; virtual void u6() = 0; virtual void u7() = 0; #ifdef _WIN64 virtual unsigned Disasm(unsigned __int64 Eip,void* CodeBuffer,unsigned BufferLength) = 0; unsigned __int64 __cdecl Addr(void)const __ptr64; unsigned __int64 __cdecl CchFormatAddr(unsigned __int64,wchar_t * __ptr64,unsigned __int64)const __ptr64; unsigned __int64 __cdecl CchFormatInstr(wchar_t * __ptr64,unsigned __int64)const __ptr64; enum DIST __cdecl Dist(void)const __ptr64; static class DIS * __ptr64 __cdecl PdisNew(enum DIST); unsigned __int64 (__cdecl*__cdecl PfncchaddrSet(unsigned __int64 (__cdecl*)(class DIS const * __ptr64,unsigned __int64,wchar_t * __ptr64,unsigned __int64,unsigned __int64 * __ptr64)) __ptr64)(class DIS const * __ptr64,unsigned __int64,wchar_t * __ptr64,unsigned __int64,unsigned __int64 * __ptr64); unsigned __int64 (__cdecl*__cdecl PfncchfixupSet(unsigned __int64 (__cdecl*)(class DIS const * __ptr64,unsigned __int64,unsigned __int64,wchar_t * __ptr64,unsigned __int64,unsigned __int64 * __ptr64)) __ptr64)(class DIS const * __ptr64,unsigned __int64,unsigned __int64,wchar_t * __ptr64,unsigned __int64,unsigned __int64 * __ptr64); unsigned __int64 (__cdecl*__cdecl PfncchregSet(unsigned __int64 (__cdecl*)(class DIS const * __ptr64,enum REGA,wchar_t * __ptr64,unsigned __int64)) __ptr64)(class DIS const * __ptr64,enum REGA,wchar_t * __ptr64,unsigned __int64); unsigned __int64 (__cdecl*__cdecl PfncchregrelSet(unsigned __int64 (__cdecl*)(class DIS const * __ptr64,enum REGA,unsigned long,wchar_t * __ptr64,unsigned __int64,unsigned long * __ptr64)) __ptr64)(class DIS const * __ptr64,enum REGA,unsigned long,wchar_t * __ptr64,unsigned __int64,unsigned long * __ptr64); unsigned __int64 (__cdecl*__cdecl PfndwgetregSet(unsigned __int64 (__cdecl*)(class DIS const * __ptr64,enum REGA)) __ptr64)(class DIS const * __ptr64,enum REGA); void * __ptr64 __cdecl PvClient(void)const __ptr64; void * __ptr64 __cdecl PvClientSet(void * __ptr64) __ptr64; void __cdecl SetAddr64(bool) __ptr64; #else virtual unsigned Disasm(unsigned __int64 Eip,void* CodeBuffer,unsigned BufferLength) = 0; unsigned __int64 Addr(void)const; unsigned int CchFormatAddr(unsigned __int64,wchar_t *,unsigned int)const; unsigned int CchFormatInstr(wchar_t *,unsigned int)const; enum DIST Dist(void)const; static class DIS * __stdcall PdisNew(enum DIST); unsigned int (__stdcall* PfncchaddrSet(unsigned int (__stdcall*)(class DIS const *,unsigned __int64,wchar_t *,unsigned int,unsigned __int64 *)))(class DIS const *,unsigned __int64,wchar_t *,unsigned int,unsigned __int64 *); unsigned int (__stdcall* PfncchfixupSet(unsigned int (__stdcall*)(class DIS const *,unsigned __int64,unsigned int,wchar_t *,unsigned int,unsigned __int64 *)))(class DIS const *,unsigned __int64,unsigned int,wchar_t *,unsigned int,unsigned __int64 *); unsigned int (__stdcall* PfncchregSet(unsigned int (__stdcall*)(class DIS const *,enum REGA,wchar_t *,unsigned int)))(class DIS const *,enum REGA,wchar_t *,unsigned int); unsigned int (__stdcall* PfncchregrelSet(unsigned int (__stdcall*)(class DIS const *,enum REGA,unsigned long,wchar_t *,unsigned int,unsigned long *)))(class DIS const *,enum REGA,unsigned long,wchar_t *,unsigned int,unsigned long *); unsigned __int64 (__stdcall* PfndwgetregSet(unsigned __int64 (__stdcall*)(class DIS const *,enum REGA)))(class DIS const *,enum REGA); void * PvClient(void)const; void * PvClientSet(void *); void SetAddr64(bool); #endif }; class DISASM { private: DIS* m_pDisasm; public: DISASM() : m_pDisasm(0) { } ~DISASM() { if (m_pDisasm) m_pDisasm->Delete(); } DIS* operator->() { return m_pDisasm; } DIS* Create(DIS::DIST i = #ifdef _WIN64 DIS::amd64 #else DIS::ia32 #endif ) { return m_pDisasm = DIS::PdisNew(i); } };
Babyshamble Вот с этого и надо было начинать. Вернее даже, хотя-бы с этого. И пользоваться этим все равно что садиться за руль машины на которой никогда не ездил и пытаться ехать точно не зная самого элементарного. Место положения газа, тормоза, зажигания. Чтобы всё это на "щупать" необходимо время, и возможно много. n0name Намёки в этом деле не считаю уместными. Только ФАКТЫ и ничего лишнего. P. S. Похоже однострочного ассемблера там все равно нет. А в моей библиотеке ассемблер это не менее 4/5 всего кода.
Babyshamble я чего то pdb не нашёл когда пару лет назад искал и майксрософтовский сервер тоже не отдавал его поделись pdb+dll может у тебя еще что то есть в pdb от студии? компилер IDE линкер итд