линковщика в MSVC: каким-то непонятным хреном на сборочном конвейере он вместо нормального адреса локальной переменной вставляет нулевое смещение в push перед вызовом функции, получается такая дичь:
```
68 00 00 00 10 push offset __ModuleEntry
E8 DD EF FE FF call foo
```
Потом при загрузке либы (dll), это место естественно преобразуется в адрес на начало модуля ну и всё - падаем с access violation.
Есть идеи каким образом до такого можно было дойти, если только не багом линкера?
Может он ожидал что-то вроде отложенной загрузки dll?
Надо код
https://godbolt.org/z/c5rxPedMj Ну и ещё забыл сказать, что такие спецэффекты наблюдаются только при отключенной оптимизации
Да потому что нехрен динамически .dll линковать, если не умеешь...
Функция так объявлена NTSYSAPI NTSTATUS RtlGetVersion( PRTL_OSVERSIONINFOW lpVersionInformation ); А ты её так вызываешь, using fnRtlGetVersion = LONG(WINAPI *)(OSVERSIONINFOEXW*); Ну вот и получи, фашист, гранату...
Эээ, ты удивишься, но это идентичные сигнатуры...
Обсуждают сегодня