Re[2]: Узнать адрес, откуда вызвали
От: пффф  
Дата: 19.06.23 05:19
Оценка:
Здравствуйте, netch80, Вы писали:

П>>Есть ли возможность более или менее легально, без грязных хаков, узнать, откуда вызвали функцию?


N>Насколько грязным не должен быть хак?

N>https://gcc.gnu.org/onlinedocs/gcc/Return-Address.html

Я для MSVC?


П>>Предполагаем, что у нас фон-неймановская архитектура, стек растёт вниз — т.е. обычная винда или линукс на не экзотическом железе.


N>Куда растёт стек — пофиг.


Почему?


П>>Я краем уха слышал о способах передачи параметров, как стек организован, и тп, и вот что родилось:


П>>1) При вызове функций компилятор складывает параметры на стек, затем вызывает функцию, при этом на стек помещается адрес возврата, т.е он у нас ниже последнего параметра


N>Почти. Только в соглашениях посовременнее стараются максимум передать в регистрах и только если этого недостаточно — класть на стек.


Ну вот это как раз вроде про x64, не?

Интересуют вызовы функций из DLL, не произвольный плюсовый код


П>>4) Если у нас несколько параметров, и мы в общем случае не знаем порядок их укладки на стек (stdcall/cdecl), то мы берём адреса крайних параметров и выбираем из них меньший, так?


N>Что такое "меньший"?


Ниже на стеке, ближе к началу адресного пространства. Чего непонятного-то?


П>>Что посоветуете?


N>Не изобретать велосипед, насколько возможно.


Изобретать ничего не хочется. Есть что готовенькое для MSVC?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.