MinGW exe очистка - PullRequest
       17

MinGW exe очистка

0 голосов
/ 28 января 2020

Какова цель этих странных строк, которые автоматически включаются в мои exe-байты?

Я нашел эти вещи в разделе строк моего exe-файла, открывая его с помощью шестнадцатеричного редактора:

libgcj-16.dll._Jv_RegisterClasses ... @ .Mingw сбой среды выполнения: .. Сбой VirtualQuery для% d байтов по адресу% p .... Неизвестная версия протокола псевдоперемещения% d ..... Неизвестное псевдо размер бита перемещения% d .....

Кажется, libgcj-16.dll относится к Java, поэтому я не понимаю, почему это должно быть там, поскольку мой софт не используется Java. Результаты, которые я нашел, похоже, связаны с компиляцией MinGW ... Использование "Dependency Walker 2.2", вероятно, говорит мне, что нет необходимости в libgcj-16.dll внутри моего exe. И нет никакого файла *libgcj* на моем жестком диске.

Также не ясно, почему присутствует этот связанный с MinGW текст, когда эти строки будут использоваться / отображаться?

Я пытался стереть все эти вещи с 0x00, и кажется, что мой крошечный софт всегда работает.

Так есть ли опция компилятора, чтобы избежать их удаления вручную? Это может стать хитрым, когда струны, присутствующие в мягком, растут. Я могу в конечном итоге сохранить «G CC: (tdm-1) 5.1.0», но я вообще не хочу ничего, связанного с Java или неиспользуемой DLL, и предпочитаю удалять бесполезный текст.

My main. c просто:

int main(void) { return 0; }

My команд построения и результат:

mingw32-gcc.exe -Os -c "C:\Dev\Win32\Empty\main.c" -o obj\Release\main.o
mingw32-g++.exe -o bin\Release\Empty.exe obj\Release\main.o -s  
Output file is bin\Release\Empty.exe with size 8.50 KB

Я компилирую с Code :: Block (MinGW 5.1.0). В моем проекте нет никаких опций / свойств здания (Консоль или GUI ничего не меняют, для выбранной платформы тоже только Windows). Большое спасибо за ваши подсказки ...

--- ОБНОВЛЕНИЕ ---

Так что у меня нет никаких функциональных проблем с моей софт, это в основном о эстетике c "проблема" с шестнадцатеричным содержимым exe, как сказал MM в комментариях. Но также необходимо понять, почему пустой софт, такой как этот, уже имеет некоторые определенные строки, тогда как мой main. c пустой и ничего не делает.

Я спрашиваю, для чего предназначены эти предопределенные строки так при чем они служат? Если ответ таков: они ничего не служат внутри вашего софта и никогда не будут отображаться, и вы даже не сможете получить указатель на них, так почему компилятор включает их в мой exe и создает бесполезный «шестнадцатеричный шум» ...

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

Я также подозреваю, что эти строки поступают из некоторой связанной библиотеки, такой как libmingw32.a (которую я только что обнаружил, когда мои Empty.exe выскакивают у меня libgcc_s_dw2-1.dll is missing, после компиляции с помощью mingw-w64, вау, мне нужна дополнительная dll с g cc сейчас! Это для меня новость, но я подозреваю, что моя предыдущая версия кодовых блоков автоматически статически связывала их, поэтому я никогда этого не замечал)

И кажется, что «многие» библиотеки будут автоматически «связаны», даже если я не предоставлю никаких ссылок в моей сборочной команде.

Вот шаги процесса, которые выполняются под капотом с помощью mingw- w64 8.1.0:

gcc.exe -Os -static-libgcc -static-libstdc++ -c main.c -o main.o

Call C:/i686-8.1.0-release-win32-dwarf-rt_v6-rev0/mingw32/bin/../libexec/gcc/i686-w64-mingw32/8.1.0/cc1.exe -quiet -iprefix C:/i686-8.1.0-release-win32-dwarf-rt_v6-rev0/mingw32/bin/../lib/gcc/i686-w64-mingw32/8.1.0/ -U_REENTRANT main.c -quiet -dumpbase main.c -mtune=generic -march=i686 -auxbase-strip main.o -Os -o C:\DOCUME~1\Admin\LOCALS~1\Temp\ccMK0Jka.s

Call C:/i686-8.1.0-release-win32-dwarf-rt_v6-rev0/mingw32/bin/../lib/gcc/i686-w64-mingw32/8.1.0/../../../../i686-w64-mingw32/bin/as.exe -o main.o C:\DOCUME~1\Admin\LOCALS~1\Temp\ccMK0Jka.s

g++.exe -static-libgcc -static-libstdc++ -o Empty.exe main.o -s

Call C:/i686-8.1.0-release-win32-dwarf-rt_v6-rev0/mingw32/bin/../libexec/gcc/i686-w64-mingw32/8.1.0/collect2.exe -plugin C:/i686-8.1.0-release-win32-dwarf-rt_v6-rev0/mingw32/bin/../libexec/gcc/i686-w64-mingw32/8.1.0/liblto_plugin-0.dll -plugin-opt=C:/i686-8.1.0-release-win32-dwarf-rt_v6-rev0/mingw32/bin/../libexec/gcc/i686-w64-mingw32/8.1.0/lto-wrapper.exe -plugin-opt=-fresolution=C:\DOCUME~1\Admin\LOCALS~1\Temp\ccIhpVxg.res -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-liconv -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt --sysroot=C:/mingw810/i686-810-win32-dwarf-rt_v6-rev0/mingw32 -m i386pe -Bdynamic -o Empty.exe -s C:/i686-8.1.0-release-win32-dwarf-rt_v6-rev0/mingw32/bin/../lib/gcc/i686-w64-mingw32/8.1.0/../../../../i686-w64-mingw32/lib/../lib/crt2.o C:/i686-8.1.0-release-win32-dwarf-rt_v6-rev0/mingw32/bin/../lib/gcc/i686-w64-mingw32/8.1.0/crtbegin.o -LC:/i686-8.1.0-release-win32-dwarf-rt_v6-rev0/mingw32/bin/../lib/gcc/i686-w64-mingw32/8.1.0 -LC:/i686-8.1.0-release-win32-dwarf-rt_v6-rev0/mingw32/bin/../lib/gcc -LC:/i686-8.1.0-release-win32-dwarf-rt_v6-rev0/mingw32/bin/../lib/gcc/i686-w64-mingw32/8.1.0/../../../../i686-w64-mingw32/lib/../lib -LC:/i686-8.1.0-release-win32-dwarf-rt_v6-rev0/mingw32/bin/../lib/gcc/i686-w64-mingw32/8.1.0/../../../../lib -LC:/i686-8.1.0-release-win32-dwarf-rt_v6-rev0/mingw32/bin/../lib/gcc/i686-w64-mingw32/8.1.0/../../../../i686-w64-mingw32/lib -LC:/i686-8.1.0-release-win32-dwarf-rt_v6-rev0/mingw32/bin/../lib/gcc/i686-w64-mingw32/8.1.0/../../.. main.o -Bstatic -lstdc++ -Bdynamic -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -ladvapi32 -lshell32 -luser32 -lkernel32 -liconv -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt C:/i686-8.1.0-release-win32-dwarf-rt_v6-rev0/mingw32/bin/../lib/gcc/i686-w64-mingw32/8.1.0/crtend.o

Another truncated call similar to the very long previous C:/i686-8.1.0-release-win32-dwarf-rt_v6-rev0/mingw32/bin/../lib/gcc/i686-w64-mingw32/8.1.0/../../../../i686-w64-mingw32/bin/ld.exe -plugin C:/...

Использование mingw-w64 5.4.0 и libgcj-16.dll придет назад, как в моем старом mingw 5.1.0, так что это кажется нормальным явлением и не связано с проблемой безопасности. (наконец, libgcj-16.dll просто в виде строк и не включен в качестве истинной dll, «как я понимаю»)

Наконец, я получаю гораздо больше «странных строк» ​​внутри моего exe с помощью mingw- w64 8.1.0 ... (и размер Empty.exe вырос с 8,50 КБ до 13,50 КБ, это не фактическая тема, но я также смотрю на создание самого маленького возможного размера, но я предпочитаю скорость вместо размера)

Вот новые странные вещи, присутствующие внутри Empty.exe, скомпилированные mingw-w64 8.1.0:

libgcc_s_dw2-1.dll .__ register_frame_info .__ deregister_frame_info .... c@.@ `@. . @ ... @ ... @ .. c@. € @ ......... Неизвестная ошибка ..._ matherr ():% s в% s (% g,% g) (retval = %г)... Ошибка домена аргумента (DOMAIN). Сингулярность аргумента (SIGN). Ошибка диапазона переполнения (OVERFLOW). Результат слишком мал, чтобы быть представленным (UNDERFLOW) ... Полная потеря значимости (TLOSS) .. Частичная потеря значимости (PLOSS ) .... ¤ @@. Ã @@. À @@ .. A@.8A@. \ A@.Mingw-w64 ошибка времени выполнения: .. Адрес% p не имеет раздела изображения. Сбой VirtualQuery для% d байтов по адресу% p .... Сбой VirtualProtect с кодом 0x% x .. Неизвестная версия протокола псевдоперемещения% d ..... Неизвестный размер бита псевдоперемещений% d ..... G CC: (i686-win32-dwarf-rev0, созданный проектом MinGW-W64) 8.1.0

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

Поэтому я приму любой ответ, который даст некоторое представление об этих "странных вещах" ...

Мой главный вопрос : Когда эти странные / неизвестные строки, включенные в мой exe-файл, будут использоваться?

...