Assembly 在Linux上用mingw交叉编译MASM语法程序集

Assembly 在Linux上用mingw交叉编译MASM语法程序集,assembly,x86,x86-64,cross-compiling,masm,Assembly,X86,X86 64,Cross Compiling,Masm,我想在Kali Linux上为64位Windows交叉编译Metasploit模板(汇编语言) 我正在尝试从汇编编译到exe 这是密码- ; Author: Stephen Fewer (stephen_fewer[at]harmonysecurity[dot]com) ; Architecture: x64 ; ; Assemble and link with the following command: ; "C:\Program Files\Microsoft Visual Studio

我想在Kali Linux上为64位Windows交叉编译Metasploit模板(汇编语言)

我正在尝试从汇编编译到exe

这是密码-

; Author: Stephen Fewer (stephen_fewer[at]harmonysecurity[dot]com)
; Architecture: x64
;
; Assemble and link with the following command:
; "C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\x86_amd64\ml64" template_x64_windows.asm /link /subsystem:windows /defaultlib:"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib\x64\kernel32.lib" /entry:main 

extrn ExitProcess : proc
extrn VirtualAlloc : proc

.code

    main proc 
        sub rsp, 40        ;
        mov r9, 40h        ; 
        mov r8, 3000h      ; 
        mov rdx, 4096      ; 
        xor rcx, rcx       ; 
        call VirtualAlloc  ; lpPayload = VirtualAlloc( NULL, 4096, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE );
        mov rcx, 4096      ;
        mov rsi, payload   ;
        mov rdi, rax       ;
        rep movsb          ; memcpy( lpPayload, payload, 4096 );
        call rax           ; lpPayload();
        xor rcx, rcx       ;
        call ExitProcess   ; ExitProcess( 0 );
    main endp

    payload proc
        A byte 'PAYLOAD:'
        B db 4096-8 dup ( 0 )
    payload endp
end

我使用的是w64-mingw32,我可以使用命令i686-mingw32msvc-gcc-xxx编译32位c文件,但是我在编译64位程序集时遇到了问题

w64-mingw32有很多不同的选项,我尝试了很多,都有错误消息。老实说,自从我有了海军准将64后,我就没做过装配

我试过:

x86_64-w64-mingw32-gcc -c template_x64_windows.asm -o file.o
错误消息是-

template_x64_windows.asm: linker input file unused because linking not done
我甚至不知道哪个选项将编译汇编,我已经在线检查了how-o,什么都没有。

您可以安装(一个相当兼容的MASM汇编程序)来汇编64位代码。使用GIT获取源代码,构建并安装:

git clone https://github.com/JWasm/JWasm.git 
cd JWasm 
cmake . 
cp jwasm /usr/local/bin 
要安装,您可能需要在基于Ubuntu的发行版上使用
sudo
运行最后一个命令

要将代码组装到64位COFF对象文件(
.o
),请使用:

然后使用以下命令构建Win64 PE可执行文件:

x86_64-w64-mingw32-gcc template_x64_windows.o -o file.exe

w64-mingw32
应采用与32位MinGW相同的命令行选项。您正在尝试编译为汇编,还是将
.S
asm源文件编译为机器代码
gcc-cfoo.s
只要您的asm是用GAS语法编写的,就可以正常工作。如果没有,就不能用gcc组装它。如果没有看到您试图构建的源代码、任何错误消息或您尝试的任何命令行选项,我们只能猜测。这不是您遇到的问题的一部分。这是MASM源代码。没有任何版本的gcc/mingw将组装它。用MASM或我认为兼容的JWASM编译,或者用GAS指令替换指令,并使用
.intel\u语法noprefix
。或者将其移植到NASM指令。非常感谢。像广告宣传的那样工作。我如何关闭线程?再次感谢各位。
x86_64-w64-mingw32-gcc template_x64_windows.o -o file.exe