Какова цель этих странных строк, которые автоматически включаются в мои 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-файл, будут использоваться?