Как собрать и связать файлы.asm с исполняемым файлом Win32?
В моей системе установлены NASM и Dev-Cpp. Dev-cpp поставляется с LD (GNU Linker). Я новичок в ассемблерном коде и процессах создания 32-битного исполняемого файла Windows из файла ассемблера. Я пытался использовать это:
nasm -f win32 ass.asm
nasm -o ass ass.o
У меня не было успеха с использованием этих команд для создания исполняемого файла. Как правильно собрать (с NASM) и связать для создания исполняемого файла, который будет работать на 32-битной Windows?
1 ответ
В одном из ваших комментариев, которые, кажется, больше не существуют, упоминалось, что на вашей Windows установлен Dev-Cpp. Если на вашем пути есть каталог bin Dev-Cpp MinGW, вам доступен GNU Linker LD.
Я не знаю, используете ли вы 32-битный или 64-битный GCC с Dev-Cpp, но это должно сработать для обоих, чтобы сгенерировать 32-битный исполняемый файл:
nasm -f win32 ass.asm -o ass.obj
ld -mi386pe -o ass.exe ass.obj
Это скажет NASM сгенерировать 32-битный объект Win32, а LD свяжет объект с 32-битным исполняемым файлом Windows i386pe.
В качестве альтернативы вы можете скачать компоновщик GoLink. Как только вы извлечете его на свой путь, вы можете сделать что-то вроде:
nasm -f win32 ass.asm -o ass.obj
GoLink.exe /console ass.obj kernel32.dll user32.dll gdi32.dll
Возможно, вам придется указать вашу точку ввода кода (метку) примерно так:
GoLink.exe /console /entry _start ass.obj kernel32.dll user32.dll gdi32.dll
куда _start
может быть меткой, на которой вы ожидаете, что ваша программа запустится. Вам не нужна ни одна из перечисленных библиотек DLL, если вы не вызываете API Win32.
Если вы не создаете консольное приложение, вы можете прекратить /console