|
|
|
Железный канал: «C, С++» |
|
|
Grebomet 1460 EGP
Рейтинг канала: 8(759) Репутация: 261 Сообщения: 4783 Откуда: Питербурх Зарегистрирован: 06.01.2003 |
|
AnrDaemon : |
Да, некоторые POSIX API в принципе нельзя перенести на винду.
Но те, что можно, перенесли, они работают, когда ломаются - чинятся и улучшаются.
|
Ты споришь с призраками, я имел в виду совсем другое.
Да, в цигвине проделали огромную работу по переносу АПИ. Плохо не то, что перенос неполон. Плохо то, что частенько перенос приходится делать через хитрые трюки и грязные хаки.
Приведу пример: под линуксом создание процесса может обломаться по двум причинам: кончились лимиты (rlimit) и кончились таблицы в ядре. В любом случае выход с точки зхрения конечного пользователя очевиден: чуть подождать, прибить ненужные приложения и попробовать снова, авось системе к тому времени полегчает.
А вот когда форк обламывается под цигвином, причин может быть гораздо больше. То, что неоднократно видел я - это то, что цигвиновский рантайм не смог заинджектить свою DLL в запущенный процесс (точнее, заинджектить-то смог, но DLL-ка отмапилась на "неправильный" адрес и усё пропало, шэф, усё пропало). Что делать в этом случае? Машину перезагружать?
AnrDaemon : |
Для меня Cygwin это неотъемлемая часть повседневной среды обитания.
Ибо стандартные средства скриптописания в винде ниже плинтуса.
|
Эммм... Для скриптописания таскать за собой цигвин - это какое-то расстройство, мне кааца. Гораздо надежнее и проще поставить конкретный скриптовый язык (Perl, питон, руби, всё прекрасно живет под виндой). Или тебе без скриптов на баше жизнь не мила?
_________________ Классическая ошибка, которую совершают проектировщики абсолютно надежных систем, – недооценка изобретательности клинических идиотов. |
|
|
ТехноМаг 360 EGP
Рейтинг канала: 2(21) Репутация: 93 Сообщения: 2513 Откуда: Кронштадт Зарегистрирован: 09.04.2007 |
|
Grebomet : |
(и надо за утилитой лишнюю ДЛЛ-ку таскать
|
Надо правильные тулчены использовать. И флаги -static-liggcc -static-libstd++ в линковщике. И не нужны уже ни либы, ни Рантаймы многометровые.
AnrDaemon : |
редства скриптописания в винде ниже плинтуса.
|
Bash доставляет, до.
добавлено спустя 4 минуты:
Grebomet : |
инджектить свою DLL в запущенный процесс
|
Ижект и форк несколько разные весчи. Инжект и в виндовом окружение спотыкается регулярно.
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей."
Последний раз редактировалось: ТехноМаг (17:54 16-01-2016), всего редактировалось 1 раз |
|
|
AnrDaemon 862 EGP
Рейтинг канала: 8(790) Репутация: 37 Сообщения: 12318
Зарегистрирован: 17.10.2004 |
|
Grebomet : |
когда форк обламывается под цигвином, причин может быть гораздо больше.
|
Обычно причин так же две. Ибо Cygwin не занимается инжектами.
Сбита карта смещений, либо кто-то заинжектил свою библиотеку поперёк стека.
От первого помогает
rebase-trigger full-rebase
и перезапуск сетапа, от второго - снос виновника в нули.
Grebomet : |
Или тебе без скриптов на баше жизнь не мила?
|
Не вижу смысла таскать за собой перл, питон и руби, если достаточно баша.
_________________ Люблю свободный полёт... :) |
|
|
Diff 708 EGP
Рейтинг канала: 8(861) Репутация: 44 Сообщения: 4179 Откуда: Сферическая Земля в вакууме. Зарегистрирован: 04.07.2003 |
|
Когда я слышу эту фразу, очень хочется взять черенок от лопаты и залюбить им достаточнобашера вусмерть.
Последнее чудесное поймал пару месяцев назад - скрипт делает rm -rf $DIR/* при этом давольно легко наигрывается ситуация когда DIR - неопределена. Разумеется, от рута и разумеется, много лет в продакшене.
_________________ Конец света в конце тоннеля |
|
|
AnrDaemon 862 EGP
Рейтинг канала: 8(790) Репутация: 37 Сообщения: 12318
Зарегистрирован: 17.10.2004 |
|
Я понимаю твои чувства в этом конкретном случае, но это не означает, что я делаю так же.
_________________ Люблю свободный полёт... :) |
|
|
Grebomet 1460 EGP
Рейтинг канала: 8(759) Репутация: 261 Сообщения: 4783 Откуда: Питербурх Зарегистрирован: 06.01.2003 |
|
ТехноМаг : |
Надо правильные тулчены использовать. И флаги -static-liggcc -static-libstd++ в линковщике. И не нужны уже ни либы, ни Рантаймы многометровые.
|
Конкретно с цигвином это раньше не прокатывало. Как сейчас - не знаю, снес давно и радуюсь до сих пор.
AnrDaemon : |
Сбита карта смещений, либо кто-то заинжектил свою библиотеку поперёк стека.
От первого помогает
rebase-trigger full-rebase
и перезапуск сетапа, от второго - снос виновника в нули.
|
Речь шла о конечном приложении, отгруженном пользователю.
Пользователь научен запускать приложение и дожидаться, пока оно не отработает до конца. Приложение обычно работает, но вот сегодня почему-то - пишет странные вещи и не работает. Пользователь умело запустил программу несколько раз, протер экран, закрыл "ворд" и даже вышел на пару из "вконтактика". Не помогло. Решите проблему СРОЧНОЛЯ, потому что ВСЯРАБОТАСТОИТЛЯ!
Пользователь, естественно, находится в другом городе, удаленные рабочие столы запрещены политикой их компании, сказать внятно ничего не может - ну то есть ситуация вполне рядовая.
Пользователь не знает, от чего помогает rebase-trigger full-rebase, где это счастье находится и как его запустить. Пользователь не может найти виновника, чья длл-ка неожиданно для цигвина загрузилась в другом, нежели у процесса-папы, месте. Просто по физиологическим причинам - руки у него подключены не к голове, а к колену, и способны отрабатывать только коленно-кликательный рефлекс на кнопке "ок".
По вышеприведенным причинам отгружать конечному пользователю продукт, собранный в цигвине - это лотерея, где вместо денежного приза разработчику приходят знатные люли.
AnrDaemon : |
Не вижу смысла таскать за собой перл, питон и руби, если достаточно баша.
|
А таскать за собой весь зоопарк люниховых утилит, без которых баш еще более убог, чем виндовый command.com - это, значится, глубокоосмысленное дело. Ню-ню.
AnrDaemon : |
Я понимаю твои чувства в этом конкретном случае, но это не означает, что я делаю так же.
|
Не то, чтобы я это как-то осуждал (каждому - свое), но только в данном конкретном случае ты защищаешь свои укоренившиеся привычки.
Странноватые, есичесна. Есть вполне себе кроссплатформенные скриптовые языки, их и ставить проще, чем цыгвин, и выбрать можно варианты разных производителей, и работают они быстрее и безглючнее, чем баш цигвиновский.
_________________ Классическая ошибка, которую совершают проектировщики абсолютно надежных систем, – недооценка изобретательности клинических идиотов.
Последний раз редактировалось: Grebomet (23:08 17-01-2016), всего редактировалось 1 раз |
|
|
AnrDaemon 862 EGP
Рейтинг канала: 8(790) Репутация: 37 Сообщения: 12318
Зарегистрирован: 17.10.2004 |
|
1. То, что ты описываешь, может произойти с ЛЮБЫМ приложением абсолютно.
Не вижу разницы. (Конкретно у меня на работе это произошло с MS Office XP. "Ну вот не желаю работать и всё!" сказал он. Хотя "вчера работал"…)
2. То, что существуют "другие языки", я знаю. Но не все будут эти другие языки учить, только чтобы потом разобраться, что делает один скрипт, написанный на [цензура] знает чём.
_________________ Люблю свободный полёт... :) |
|
|
ТехноМаг 360 EGP
Рейтинг канала: 2(21) Репутация: 93 Сообщения: 2513 Откуда: Кронштадт Зарегистрирован: 09.04.2007 |
|
Grebomet : |
Конкретно с цигвином это раньше не прокатывало
|
Ну потому-что конкретно стандартный цегвиновский gcc требует цегвиновскую же либу и ключи там не помогут (хотя мб -static дописать, но тогда он вообще все слинкует в единую сущность). А вот если доставить binutils и прочее из ветки devel/gcc-mingw, или devel/gcc-gnu-linux все очень даже работает.
Ну или бонально собрать нужный gcc из сурцев и не парится (но мне лениво)
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей."
Последний раз редактировалось: ТехноМаг (01:59 18-01-2016), всего редактировалось 1 раз |
|
|
Grebomet 1460 EGP
Рейтинг канала: 8(759) Репутация: 261 Сообщения: 4783 Откуда: Питербурх Зарегистрирован: 06.01.2003 |
|
ТехноМаг : |
Ну потому-что конкретно стандартный цегвиновский gcc требует цегвиновскую же либу и ключи там не помогут
|
Ото ж.
AnrDaemon : |
1. То, что ты описываешь, может произойти с ЛЮБЫМ приложением абсолютно.
|
Это не так, и ты это прекрасно знаешь.
Далеко не все приложения запускают дочерние процессы, и уж тем более далеко не все патчат память запущенного процесса.
AnrDaemon : |
Не вижу разницы.
|
Да, это известная проблема.
AnrDaemon : |
Но не все будут эти другие языки учить, только чтобы потом разобраться, что делает один скрипт, написанный на [цензура] знает чём.
|
Кому надо - выучит, не облезет, чай, не rocket science. Практически все скриптовые языки просты, как три рубля.
А если наличие скрипта на малознакомом языке удручает чье-то чувство прекрасного - его завсегда можно переписать на чем-то более подходящем.
Даю намек: язык, требующий установки ажно целой мини-ОСи внутри винды, не является более подходящим.
Что касается якобы бедности виндового скриптинга - вы его просто готовить не умеете есть VBS, PowerShell и прочие чудеса, работающие искаропки и умеющие практически усё. Да, слегка не кроссплатформенные, зато не костыль. Да и батники никто не отменял - отлично работают, когда не надо развесистой логики.
_________________ Классическая ошибка, которую совершают проектировщики абсолютно надежных систем, – недооценка изобретательности клинических идиотов. |
|
|
AnrDaemon 862 EGP
Рейтинг канала: 8(790) Репутация: 37 Сообщения: 12318
Зарегистрирован: 17.10.2004 |
|
VBS и PowerShell сами еште. (И,да, я УМЕЮ ими пользоваться, как и CMD. Вещи, которые я на CMD делаю, не все вообще знают, что они в принципе возможны.)
Если VBS ещё можно терпеть, то PowerShell - жуткий пиздец, созданный в попытках задавить упрёки в убогости документации и ущербности стандартизации CMD.
В результате получиось нечто, что вообще непонятно зачем нужно и как использовать.
Только задумайся на минутку, формат вывода информации во всех командах по умолчанию - табличный! Таблицы! В консоли! Ни скопировать, ни отфильтровать.
Grebomet : |
Это не так, и ты это прекрасно знаешь.
|
Это так, и я тебе привёл конкретный пример.
_________________ Люблю свободный полёт... :) |
|
|
Grebomet 1460 EGP
Рейтинг канала: 8(759) Репутация: 261 Сообщения: 4783 Откуда: Питербурх Зарегистрирован: 06.01.2003 |
|
AnrDaemon : |
Если VBS ещё можно терпеть, то PowerShell
|
Это все твои личные эстетические предпочтения.
Я вот, например, наоборот - баш не люблю даже под никсами, потому что потоптался в свое время по его граблям.
AnrDaemon : |
Это так, и я тебе привёл конкретный пример.
|
... не относящийся к сути обсуждаемой проблемы внутренних хаков цигвина, но плавно уводящий диалог в сторону пустопорожнего трепа.
_________________ Классическая ошибка, которую совершают проектировщики абсолютно надежных систем, – недооценка изобретательности клинических идиотов. |
|
|
ТехноМаг 360 EGP
Рейтинг канала: 2(21) Репутация: 93 Сообщения: 2513 Откуда: Кронштадт Зарегистрирован: 09.04.2007 |
|
Grebomet : |
к сути обсуждаемой проблемы внутренних хаков цигвина
|
Абще изначально мы тут makefile пытались обсудить, а не цигвин.
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей." |
|
|
Grebomet 1460 EGP
Рейтинг канала: 8(759) Репутация: 261 Сообщения: 4783 Откуда: Питербурх Зарегистрирован: 06.01.2003 |
|
Абще изначально тема про С/С++, а не макефиле.
_________________ Классическая ошибка, которую совершают проектировщики абсолютно надежных систем, – недооценка изобретательности клинических идиотов. |
|
|
DIMOSUS.X 997 EGP
Рейтинг канала: 4(58) Репутация: 188 Сообщения: 3252 Откуда: Vilnius/Minsk Зарегистрирован: 06.08.2008 |
|
Помогите, а то уже крыша едет
Из С++ в линуксе пытаюсь создать исполняемый файл (точнее я его принимаю по радиоканалу и пытаюсь сохранить на диск).
При этом получаю то
Segmentation fault
, то
*** Error in `./robot': double free or corruption (out): 0x6b5004e0 ***
Я бы считал, что сам дурак, но скажем изображения и текстовые файлы создаются без проблем. А вот достаточно скопировать в текстовый файл содержимое запускаемого файла, как начинает крашится, при попытке сохранить на диск.
Может в линуксе есть какие-то настройки безопасности, запрещающие создание приложениями таких файлов?
_________________ Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом.
Последний раз редактировалось: DIMOSUS.X (21:11 28-01-2016), всего редактировалось 1 раз |
|
|
Minx 985 EGP
Рейтинг канала: 2(19) Репутация: 135 Сообщения: 10533 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005 |
|
double free or corruption - это проблемы с управлением памятью. т.е. два раза сделал delete/free, вышел за разрешенные пределы и т.п.
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
Grebomet 1460 EGP
Рейтинг канала: 8(759) Репутация: 261 Сообщения: 4783 Откуда: Питербурх Зарегистрирован: 06.01.2003 |
|
DIMOSUS.X : |
Может в линуксе есть какие-то настройки безопасности, запрещающие создание приложениями таких файлов?
|
Нет таких. Ищи, где два раза объект удаляешь или за конец выделенного буфера записываешь.
Для начала - собери свою чудо-программу с отладочной информацией (опция -g). А потом прогони ее под valgrind, --tool=memcheck (ну или как-то так). Он тебе вывалит примерно такое:
Код: |
==2037==
==2037== Invalid free() / delete / delete[] / realloc()
==2037== at 0x402719C: operator delete(void*) (vg_replace_malloc.c:457)
==2037== by 0x8048749: main (test.cc:58)
==2037== Address 0x42c6028 is 0 bytes inside a block of size 4 free'd
==2037== at 0x402719C: operator delete(void*) (vg_replace_malloc.c:457)
==2037== by 0x8048731: main (test.cc:56)
==2037==
|
Вот по именам файлов и номерам строк и смотри, где что удалялось. В моем примере - первый раз объектик удалился в main.cc:56, а уже через строчку я его удаляю снова.
_________________ Классическая ошибка, которую совершают проектировщики абсолютно надежных систем, – недооценка изобретательности клинических идиотов. |
|
|
Diff 708 EGP
Рейтинг канала: 8(861) Репутация: 44 Сообщения: 4179 Откуда: Сферическая Земля в вакууме. Зарегистрирован: 04.07.2003 |
|
Grebomet : |
А потом прогони ее под valgrind
|
Либо предъяви код в сюда. Если там плюсы - в них double free or corruption умеет по довольно неожиданным поводам вылезать. Если нет - вангую, у тебя там что-то связанное с размером либо с использованием строковых функций, натыкающихся на ноль в бинарнике.
_________________ Конец света в конце тоннеля |
|
|
DIMOSUS.X 997 EGP
Рейтинг канала: 4(58) Репутация: 188 Сообщения: 3252 Откуда: Vilnius/Minsk Зарегистрирован: 06.08.2008 |
|
****!
По радиоканалу передача идет пакетами по 32 байта. Если в пакете первые восемь байт соответствуют маркеру, то он считается управляющим.
Вот какова вероятность, что в файле встретиться последовательность из восьми байт, которую я совершенно рандомно сгенерил? Один из 256^8? Но вот именно это я и поймал...
добавлено спустя 6 минут:
При чем эта моя последовательность встречалась именно в исполняемых файлах
добавлено спустя 11 минут:
Да если перебирать по 1000 комбинаций в секунду, нужно 500 миллионов лет что бы перебрать их все. А оно у меня на первом же файле...
_________________ Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом.
Последний раз редактировалось: DIMOSUS.X (11:31 29-01-2016), всего редактировалось 4 раз(а) |
|
|
AnrDaemon 862 EGP
Рейтинг канала: 8(790) Репутация: 37 Сообщения: 12318
Зарегистрирован: 17.10.2004 |
|
Напомнить, как Delphi 4 крашилась на компах с видеокартой S3ViRGE ?
Тоже рандомный CLSID сгенерили.
Так что одной только последовательности недостаточно, добавь контрольный код.
Хоть CRC32. Он короткий и легко считается.
_________________ Люблю свободный полёт... :) |
|
|
Minx 985 EGP
Рейтинг канала: 2(19) Репутация: 135 Сообщения: 10533 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005 |
|
DIMOSUS.X : |
Вот какова вероятность, что в файле встретиться последовательность из восьми байт, которую я совершенно рандомно сгенерил? Один из 256^8? Но вот именно это я и поймал...
|
Если на той стороне стоит такой же генератор, то вероятность близка к 100% (;
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
|
|
|
Железный канал: «C, С++» |
|