Вы можете посмотреть дамп сборки для каждой функции.В gcc вы используете опцию -S
.
Допустим, вас интересует функция foo
.Затем gcc изменяет имя функции на _foo
.Если вы посмотрите на сборку, в верхней части функции вы увидите инструкцию по перемещению указателя стека.Например, в OSX у вас есть что-то вроде:
_foo:
...
movq %rsp, %rbp
...
subq $48, %rsp
Это число, $48
, является размером стека.
В качестве альтернативы, вы можете искать эквивалентную команду, используя nm
чтобы найти адрес, с которого начинается функция, ndisasm
, чтобы получить удобочитаемый дамп, а затем сканировать, куда перемещен указатель стека.