Кросс-компиляция MASM-синтаксической сборки с mingw в Linux - PullRequest
1 голос
/ 23 мая 2019

Я хочу кросс-компилировать шаблон Metasploit (на ассемблере) для 64-битной Windows на Kali Linux.

Я пытаюсь скомпилировать из сборки в 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 и могу скомпилировать 32-битные файлы c командой i686-mingw32msvc-gcc xxx, но у меня возникают проблемы с компиляцией 64-битной сборки.

Существует так много разных вариантов для w64-mingw32, я пробовал множество, все с сообщениями об ошибках. Если честно, я не делал сборку, так как у меня был Commodore 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


Я даже не знаю, какой вариант будет компилировать сборку, я проверил в Интернете, как это сделать, ничего.

1 Ответ

1 голос
/ 23 мая 2019

Вы можете установить JWASM (разумно совместимый ассемблер MASM) для сборки 64-битного кода. Получите исходный код с помощью GIT, соберите и установите его:

git clone https://github.com/JWasm/JWasm.git 
cd JWasm 
cmake . 
cp jwasm /usr/local/bin 

Для установки может потребоваться выполнить последнюю команду с sudo на дистрибутивах на основе Ubuntu.

Чтобы собрать код в 64-битный объектный файл COFF (.o), вы используете:

jwasm -win64 template_x64_windows.asm

Затем создайте исполняемый файл Win64 PE, используя:

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