I'm very happy to announce the release of UnivDisasm. A powerful x86 disassembler and opcodes analyzer. The idea started when I was learning Intel AVX512 instructions set .And I realized that I need a powerful x86 disassembler to decode AVX512 opcodes. Unfortunately a few libraries was available and in the most case they give a wrong memory size or wrong instructions length (they were buggy),not mentioning that all was coded using c programming language .So in the summer of 2014,I started implementing zDisAsmLibrary project, However things get dirty and I got a buggy disassembler library too. It was good for legacy x86 instructions but not for AVX, so I dropped the project and started with a new one hopping that will be much better. I spent mostly all the time between the summer of 2014 and this one collecting and reading available resources till I decided to start the real coding staff (this Mai). I know you may get bored when you are reading this story…Ok, I will stop!

I'm very happy to announce the  release of UnivDisasm. A powerful x86 disassembler and opcodes analyzer. The idea started when I was learning Intel AVX512 instructions set .And I realized that I need a powerful x86 disassembler to decode AVX512 opcodes. Unfortunately a few libraries was available and in the most case they give a wrong memory size or wrong instructions length (they were buggy),not mentioning that all was coded using c programming language .So in the summer of 2014,I started implementing zDisAsmLibrary project, However things get dirty and I got a buggy  disassembler library too. It was good for legacy x86 instructions but not for AVX, so I dropped the project and started with a new one hopping that will be much better. I spent mostly all the time between the summer of 2014 and this one collecting and reading available resources till I decided to start the real coding staff (this Mai). I know you may get bored when you are reading this story…Ok, I will stop!
Here is some features of UnivDisasm:
-x86 and x86-64 support.
-Support mostly all instructions found in Intel and AMD documentation, including:
*FPU,MMX,SSE,SSE2,SSE3,SSSE3,SSE4.1,SSE4.2,SSE5,3DNOW,AVX,AVX2 ,FMA,FMA4.
*AES, MPX, F16C, TSX, VME, BMI, BMI2 …
*AVX512F, AVX512BW, AVX512CD, AVX512DQ, AVX512ER, AVX512PF, AVX512VBMI, AVX512IFMA.
-Support decoding the following encoding:
*REX, DREX, VEX, EVEX, XOP.
-Support for Intel new syntax enhancement:
*Masking, Zeroing, Rounding, Broadcasting …
-Customized:
UnivDisasm has an open architecture allowing for easy to extend for others syntax. You can have your own assembler syntax with less code writing! 
-Support for VSIB memory addressing.
-Support Compressed displacement called disp8*N.
-Safe:
*Thread safe: You don’t need to worry when working with multi threads. 
*Disasm safe: UnivDisasm provides errors detecting and safe bytes reading mechanisms.
-Analyzer:
UnivDisasm comes with a powerful code analyzer: detecting for errors, warnings, wrong prefixes use, wrong memory address …
There are many others features such as Flags and instructions categories grouping … that I am not going to talk about.
Please do me a favor and don’t ask me for Delphi versions support that don’t have record helper feature. And please be patient for the documentations (I am so tired that I may die if I write another single line).

Last words, I ‘like to give a thanks to Christian Ludloff and to the NASM team for their great x86 resources. And a thanks to the Perl community for their awesome scripting that made my life easier.

https://github.com/MahdiSafsafi/UnivDisasm

Comments

  1. Great project. Looking at the source code you've done a very clean job.  Is there a way to test it against say masm output. I mean does your disasm output the same format as masm?

    ReplyDelete
  2. Johan Bontes
    By default ,UnivDisasm use UnivSyntax (based on nasm syntax).However as i mentioned,you can build your own syntax for your favorite assembler language with a few lines of code (check UnivSyntax unit).

    ReplyDelete
  3. Alexander Benikowski Can you please explain what do you mean ?

    ReplyDelete
  4. Delphinus is a new PackageManager for Delphi Xe and up. By seting up your repo on github correctly, your repo becomes installabel right from within the ide(dowliading source, building and installing packages)

    ReplyDelete
  5. Alexander Benikowski Thanks Alexander.I have never used Delphinus before. I will search for some articles on it and i will decide if i can setup the library.

    ReplyDelete
  6. Under "I made this" you can find a post by me with a link to my Blogarticke(writing on Phone, sharing links is a bit clumsi)

    ReplyDelete

Post a Comment