Многие специалисты, по роду своей деятельности сталкивающиеся с исследованием различных модулей, анализом причин тех или иных сбоев и проводящие иную аналогичную работу, в своей практике часто сталкиваются с таким понятием как стек вызовов. Очевидно, что он представляет собой последовательность вызова функций в контексте выполняющегося потока. Тем не менее, в стеке вызовов не все так очевидно, как хотелось бы, и поэтому я решил набросать (прежде всего для себя самого) небольшую шпаргалку относительно некоторых важных деталей. Помимо последовательности вызова функций, так же неплохо было бы обсудить формат описания процедур, да и некоторые другие нюансы, возникающие в процессе функционирования приложений. Тем, кому доводилось работать с различного рода задачами в отладчиках, к примеру, над изучением различного рода дампов памяти, или отладкой приложения, понимали, что одним из центральных аспектов является так называемый стек вызовов потока, который представляет собой, состоящий из записей:
portcls!PcHandlePropertyWithTable+0x1b
Понятное дело, что это всего-лишь обобщенный вид, но я просто хочу обратить сегодня ваше внимание на саму структуру данной записи. В показанном формате отладчик выводит данные о вызываемых в ходе выполнения кода функциях. Конечно же, записи в стеке вызовов имеют определенный формат: