Multiline Ultimate Assembler (an x64dbg plugin)

Multiline Ultimate Assembler is a multiline (and ultimate) assembler (and disassembler) plugin for x64dbg and OllyDbg. It’s a perfect tool for modifying and extending a compiled executable functionality, writing code caves, etc.

Source code:

rar multiasm.rar (475.86 kB, changelog)

Posted in Releases, Software by Michael (Ramen Software) on September 13th, 2009.
Tags: , ,

222 Responses to “Multiline Ultimate Assembler (an x64dbg plugin)”

  1. sonate says:

    its not support chinese in x64dbg.
    i have changed font_name in x64dbg.ini,but its not working.
    btw,i changed the resource to chinese and do something,still not wokring

  2. MulleDK19 says:

    Any chance to change this to asmjit in x64dbg? It seems to be using XEDParse which has issues.

    I can’t get it to assemble “movss dword ptr ss:[rsp+0x18], xmm2”

  3. dredknight says:

    Any idea how to add float ? or add it as hex directly?

    @float 2.5


    BINARY dc cc cc 3c

    Is there a syntax guide i can learn from?

  4. dredknight says:

    what about integers? When i do this

    int 10

    debugger shows
    CD 10 00 00

    where it is supposed to show:
    0A 00 00 00

  5. tuotuode says:

    For xdbg plugin, it is better not to call IsDialogMessage, because it will modify the flow of the system message processing call, causing some unpredictable consequences. For example, for Chinese character set, raedit supports gbk encoding, but after the message processed by IsDialogMessage, the encoding received by WM_CHAR in the raedit message loop will be changed to unicode encoding. I spent a lot of time debugging to understand why it kept messing up after setting the font. Finally I commented out the following two lines and found that everything worked.
    //if(IsDialogMessage(hWnd, lpMsg))
    // return TRUE.

    • I’m not using Chinese, so I never experienced this problem. `IsDialogMessage` is used for other things, too, such as navigation with the tab key. There must be a more correct fix for that. If you find a better fix, let me know and I’ll consider including it in the plugin.

  6. Megatron747 says:

    Hi, thanks for the plugin, saves me a lot of time, anyway

    A couple of things

    It throws an error in x32dbg when compiling the line

    PUSH 80000000

    If I change it to

    PUSH 08000000

    it compiles and I can change it manually, just to let you know.

    Another feature request if I may:

    I have 5 code blocks say

    Code Block 1

    Code Block 2

    Code Block 3

    Code Block 4

    If I change any code in Code Block 1 I have to manually change the offsets 2,3,4 is there a way to get the value in the angular brackets to take the next available byte

    again thanks for the great plugin

    • Hi,

      It throws an error in x32dbg when compiling the line

      PUSH 80000000

      Multiline Ultimate Assembler uses the debugger’s API for assembling instructions. For x64dbg, I believe that the last engine you used as a single command assembler is then used for the API. Try focusing on a command and pressing space, then select a different engine and assemble for it to be saved. Maybe it will work better with a different assembler engine.

      In any case, that would be a question for x64dbg. You can check for past issues and create your own here:

      is there a way to get the value in the angular brackets to take the next available byte

      There’s no way to do that. Of course, if you want the blocks to be sequential, you can just have one block, so I believe I’m missing something here. Can you provide a more detailed example?

      • Megatron747 says:

        Hi, thanks for the reply. I created each code block as a separate functions at different times. It never occurred to me to make them all part of the same code block, thanks I will do that now

Leave a Reply