FreeBasic
Главная
Вход
Регистрация
Среда, 09.10.2024, 10:46Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Компилирование в ASM , а потом в EXE
haavДата: Понедельник, 17.09.2012, 09:28 | Сообщение # 1
Генералиссимус
Группа: Администраторы
Сообщений: 1363
Репутация: 49
Статус: Offline
Для тех кто неплохо знает ассемблер, есть возможность скомпилировать исходный код FreeBasic в ASM исходник и подправить по своему усмотрению, а впоследствии его скомпилировать в приложение. С данным вопросом помог electrik. Обсуждалась данная тема ЗДЕСЬ, но я решил создать отдельную тему, дабы при случае можно было легко найти.

И так для того чтобы создать ASM листинг из файла BAS , нужно компилятору передать параметры:

Код
fbc -R test.bas -v


Где ключ -R как раз нужен для того , чтобы сохранить ASM файл , а ключ -V для того чтобы подсмотреть все параметры компиляции для будующего создания приложения.

В окне консоли выводится примерно следующее:

Код
D:\Freebasic\fbedit\Projects\MyProject\Классные примеры на FreeBasic\Другие поле
зности\Создание ASM а потом в EXE>fbc -R test.bas -v
FreeBASIC Compiler - Version 0.24.0 (08-19-2012) for win32
Copyright (C) 2004-2012 The FreeBASIC development team.
standalone, objinfo (libbfd 217)
compiling:    test.bas -o test.asm (main module)
assembling:   D:\Freebasic\fbedit\Compilier\bin\win32\as.exe --32 --strip-local-
absolute "test.asm" -o "test.o"
linking:      D:\Freebasic\fbedit\Compilier\bin\win32\ld.exe -o "test.exe" -subs
ystem console "D:\Freebasic\fbedit\Compilier\lib\win32\fbextra.x" --stack 104857
6,1048576 -s -L "D:\Freebasic\fbedit\Compilier\lib\win32" -L "." "D:\Freebasic\f
bedit\Compilier\lib\win32\crt2.o" "D:\Freebasic\fbedit\Compilier\lib\win32\crtbe
gin.o" "D:\Freebasic\fbedit\Compilier\lib\win32\fbrt0.o" "test.o" "-(" -luser32
-lfb -lgcc -lmsvcrt -lkernel32 -lmingw32 -lmingwex -lmoldname -lsupc++ "-)" "D:\
Freebasic\fbedit\Compilier\lib\win32\crtend.o"

D:\Freebasic\fbedit\Projects\MyProject\Классные примеры на FreeBasic\Другие поле
зности\Создание ASM а потом в EXE>pause
Для продолжения нажмите любую клавишу . . .


Далее ASM файл редактируется по своему усмотрению и наконец сама компиляция в EXE:

Создаем CMD файл с содержанием, которое мы увидели при создании ASM листинга:

Код
D:\Freebasic\fbedit\Compilier\bin\win32\as.exe --32 --strip-local-absolute "test.asm" -o "test.o"
ld.exe -o "test.exe" -subsystem console "D:\Freebasic\fbedit\Compilier\lib\win32\fbextra.x" --stack 1048576,1048576 -s -L "D:\Freebasic\fbedit\Compilier\lib\win32" -L "." "D:\Freebasic\fbedit\Compilier\lib\win32\crt2.o" "D:\Freebasic\fbedit\Compilier\lib\win32\crtbegin.o" "D:\Freebasic\fbedit\Compilier\lib\win32\fbrt0.o" "test.o" "-(" -luser32 -lfb -lgcc -lmsvcrt -lkernel32 -lmingw32 -lmingwex -lmoldname -lsupc++ "-)" "D:\Freebasic\fbedit\Compilier\lib\win32\crtend.o"
pause


Все в нашем каталоге должны быть три файла с разным расширением:

.o - объектный файл
.asm - ASM листинг
.exe - приложение

Всего доброго!


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
SomerickДата: Суббота, 09.02.2019, 06:19 | Сообщение # 2
Рядовой
Группа: Пользователи
Сообщений: 14
Репутация: 2
Статус: Offline
Подобной компиляцией в несколько вызовов утилит пользуюсь, не люблю когда в программу компилятор добавляет всякое лишнее что не нужно, без чего точно работает. В большинстве программ мне не нужны crtbegin.o crtend.o и подобные добавки, нет инициализации статических классов, вызова конструкторов, деструкторов, нет обработки исключений, критических секций и проч. хитростей. И недолюбливаю тип String, как с ним организована работа, соединение строк. И Print не нравится, когда есть эффективный форматирующий printf из C, а также самодельные есть, пишу свои типы, функции если надо.

Ладно, хорошо, что можно альтернативами пользоваться и скриптами можно управлять, настраивать параметры и заодно исключить кое-что. Но неужели один fbc не может.
gcc из MinGW знаю точно, может если его попросить в командной строке, даст искомый результат, сделает минимальный ехе размером в районе единиц КБ, всё как надо - только исходный скомпилированный код и никаких добавок crt*.o итп.

Батники есть, так-то с ними работает, но как иначе, есть ли новый вариант? Чтоб в одну строку, просто вызов fbc.exe и параметры.
Известно, можно передавать параметры линкеру посредством -Wl
Можно передавать ассемблеру через -Wa.
Ключ -nostartfiles fbc к сожалению не принимает.
 
  • Страница 1 из 1
  • 1
Поиск: