Я не совсем понимаю, чего вы пытаетесь достичь, но, если вы компилируете с -fPIC и не заставляете вашу функцию делать что-то необычное, никаких других вызовов функций, не обращающихся к данным извне, вы можете даже получить покончить с этим один раз. Я бы сказал, что самая безопасная возможность - ограничить максимальный размер поддерживаемой функции, скажем, до 1 килобайта, просто передать его и не учитывать конечный мусор.
Если вам действительно необходимо знать точный размер функции, выясните эпилог и пролог вашего компилятора. На x86 это должно выглядеть примерно так:
:your_func_epilogue
mov esp, ebp
pop ebp
ret
:end_of_func
;expect a varying length run of NOPs here
:next_func_prologue
push ebp
mov ebp, esp
Разберите выходные данные вашего компилятора, чтобы проверить, и возьмите соответствующие собранные последовательности для поиска. Одного эпилога может быть достаточно, но все это может взорвать, если искомая последовательность появляется слишком рано, например в данных, встроенных функцией. Я думаю, что поиск следующего пролога также может привести к неприятностям.
Теперь, пожалуйста, не обращайте внимания на все, что я написал, поскольку вы, очевидно, пытаетесь подойти к проблеме неправильно и по своей сути небезопасно. Нарисуйте нам более широкую картину, пожалуйста, ПОЧЕМУ вы пытаетесь это сделать, и посмотрите, сможем ли мы найти совершенно другой подход.