Pull to refresh

Comments 26

UFO just landed and posted this here
Кхе кхе… это вы ещё не самый худший вариант поговорки со словом «Один» для данной ситуации вспомнили, а уже досталось.
1ES
У меня какое-то предвзятое отношение к названиям, которые произносятся как «один эс».

Ну тогда у вас не должно быть проблем с 1ES.

UFO just landed and posted this here
UFO just landed and posted this here
Подавятся. За гитом Торвальдс и FSF. Тут ещё кто кого ЕЕЕ. Де-факто MS подписал приговор своим системам контроля версий и сборки в угоду открытому Git.

Поправка: своим системам контроля версий MS подписали приговор еще несколько лет назад, когда TFS на git перешел.

О, может вы подскажете. В принципе для меня уже не актуально, просто интересно.
Есть баг: https://github.com/git-for-windows/git/issues/741
Он не в самом Git for Windows, а в экзешниках MinGW, которые он использует.
Там при запуске секции делаются writable через VirtualQuery() + VirtualProtect().
В исходниках предполагается, что VirtualQuery() всегда возвращает размер секции.
На некоторых компьютерах VirtualQuery() для секции ".text" возвращает не размер секции, а круглое число чуть меньшего размера. Как будто Windows при запуске программы разделяет секцию на 2 региона.
Проявлялось на нескольких машинах с Windows 7 с очень урезанными правами.


Разработчики исправлять не собираются, хотя это несложно. В принципе баг редкий, особо и не надо. Но было бы интересно узнать, из-за чего в Windows может быть такое поведение.

because it's the bug of mingw, вернее ее реализация вокруг mark_section_writable.
Поэтому и не собираются, ибо нефиг плодить воркараунды.
Т.е. баг делегирован дальше, имхо абсолютно правилно, см. MinGW-w64 — for 32 and 64 bit Windows / Bugs / #537 pseudo_reloc fails to mark pages writable

Под разработчиками я имел в виду разработчиков mingw, хотя и первых тоже. Одни используют программу других и не хотят напоминать им о баге, другие просто не хотят исправлять. Делегирован он другим пользователем, который и написал эту ссылку в комментах к багу на гитхабе. Вопрос у меня не в том как исправить, а почему у Windows может быть такое поведение относительно секций.

Я могу конечно ошибаться, но думается мне почему-то, что это ASLR (и-или DEP).
Если на машинках, где обоих можно выключить, баг не воспроизводится — оно говорит за-то...


Ну и если да, решения два (кроме как не юзать винду):


  • не использовать абсолютных указателей (только относительные, не думаю что вариант для mingw)
  • или бороться как я например тут для nginx делал, т.е. грубо говоря переалоцировать base, пока не выравняем блок у всех caller по одному адресу (good luck with its implementation;).

Ну или тот-же воркараунд на секции .text (MEM_WRITE как сделал Jason Bell), хотя не сукьюрно оно как-то.

Нет, я когда отлаживал, заметил что перебазируется, тогда и узнал про ASLR, сначала тоже думал из-за этого. Но баг проявляется независимо от базы и с отключенным ASLR. Насчет DEP тоже не уверен, секция .text явно не data.

Не совсем понял. Если почитать MSDN, там VirtualQuery
а) меняет искомый адрес для соответствия границе страницы.
б) дает информацию только о наборе страниц, начиная с указанной, которые выделены одним вызовом, имеют одинаковые атрибуты доступа и состояние.

То есть однозначно гарантируется, что число опрошенных страниц не всегда равно выделенному числу страниц.

The function determines the attributes of the first page in the region and then scans subsequent pages until it scans the entire range of pages or until it encounters a page with a nonmatching set of attributes. The function returns the attributes and the size of the region of pages with matching attributes, in bytes. For example, if there is a 40 megabyte (MB) region of free memory, and VirtualQuery is called on a page that is 10 MB into the region, the function will obtain a state of MEM_FREE and a size of 30 MB.

Да, вот при запуске, когда выделяется память под секции, почему-то или делается 2 вызова или появляются страницы с другими атрибутами. Хотя вроде в заголовке атрибуты задаются на всю секцию, да и выделять память логично одним куском. Может конечно антивирус балуется, но все равно немного странно.

UFO just landed and posted this here
Там сплошной C#…
Если уж Линус на С++ ругался, страшно представить что он microsoft тут покажет, nvidia отделалась лёгким испугом… :)

Он ругался не на С++, а на загрузку рантайма плюсов в ядро

Хм, про случай с GIT я не слышал.


В любом случае, между "добавить новый язык в единственную реализацию" и "сделать полностью совместимую обертку" есть огромная разница.


От GVFS, если что-то пойдет не так, легко отказаться. Просто понадобится больше локальных ресурсов на хранение репозитория целиком.

UFO just landed and posted this here
Sign up to leave a comment.

Articles

Change theme settings