Размер, выделенный для параметров, отправляемых методу - PullRequest
2 голосов
/ 20 октября 2011

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

Ответы [ 3 ]

2 голосов
/ 20 октября 2011

В общем, нет.Для начала, вы не знаете соглашение о вызовах, поэтому вы не знаете, как были переданы параметры и кто должен их очищать.Даже если вы знаете соглашение о вызовах, я не верю, что есть надежный способ определить, что вы просите.

0 голосов
/ 20 октября 2011

Если все данные размещены в стеке, то для функции foo (par1, par2, ..., par10) размер параметров par1, ..., par9 должен быть ((long) & par10) - ((long) & par1).

Вы можете добавить фиктивный параметр в конец списка параметров, что позволит вам определить размер всех реальных параметров.

0 голосов
/ 20 октября 2011

Вы обычно видите такие функции, как;

myFunction(char* buffer, int bufferSize, ...) { ... }

без отправки размера в качестве второго параметра (или в структуре) вы не можете определить выделенное пространство. но если это строка или другой байтовый массив со значительным разделителем, вы можете проверить размер (не выделенное пространство).

edit: для получения размеров параметров вам необходимо использовать библиотечные функции va_list, va_start, va_arg, va_end.

http://www.cplusplus.com/reference/clibrary/cstdarg/va_list/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...