Здравствуйте, netch80, Вы писали:
П>>Есть ли возможность более или менее легально, без грязных хаков, узнать, откуда вызвали функцию?
N>Насколько грязным не должен быть хак?
N>https://gcc.gnu.org/onlinedocs/gcc/Return-Address.html
Я для MSVC?
П>>Предполагаем, что у нас фон-неймановская архитектура, стек растёт вниз — т.е. обычная винда или линукс на не экзотическом железе.
N>Куда растёт стек — пофиг.
Почему?
П>>Я краем уха слышал о способах передачи параметров, как стек организован, и тп, и вот что родилось:
П>>1) При вызове функций компилятор складывает параметры на стек, затем вызывает функцию, при этом на стек помещается адрес возврата, т.е он у нас ниже последнего параметра
N>Почти. Только в соглашениях посовременнее стараются максимум передать в регистрах и только если этого недостаточно — класть на стек.
Ну вот это как раз вроде про x64, не?
Интересуют вызовы функций из DLL, не произвольный плюсовый код
П>>4) Если у нас несколько параметров, и мы в общем случае не знаем порядок их укладки на стек (stdcall/cdecl), то мы берём адреса крайних параметров и выбираем из них меньший, так?
N>Что такое "меньший"?
Ниже на стеке, ближе к началу адресного пространства. Чего непонятного-то?
П>>Что посоветуете?
N>Не изобретать велосипед, насколько возможно.
Изобретать ничего не хочется. Есть что готовенькое для MSVC?