Fil-C: convención de llamada que garantiza seguridad de memoria incluso contra código adversario

Fuentes: Fil-C
Fil-C: convención de llamada que garantiza seguridad de memoria incluso contra código adversario
Imagen generada con IA

Fil-C es una convención de llamada optimizada diseñada para garantizar seguridad de memoria incluso cuando los programas se comportan de manera adversarial. En esencia, previene errores graves como pasar argumentos de tipos incorrectos, convertir punteros de función a firmas equivocadas, o mezclar símbolos exportados como funciones versus datos.

La convención opera en dos niveles: una génerica completamente segura pero más lenta, y capas de optimización que mantienen esa seguridad sin sacrificar rendimiento. La génerica resuelve el destino obteniendo un 'flight pointer', verifica que sea válido (no nulo, capacidad de función correcta, valores coincidentes), calcula buffers redondeando tamaños a múltiplos de 8 bytes, copia argumentos con sus capacidades asociadas, transfiere control de forma segura, y maneja valores de retorno idénticamente.

Las optimizaciones son tres: primero, el paso por registros evita buffers thread-local cuando es posible, pasando argumentos directamente en registros comorax, rdi, etc. Segundo, las llamadas directas omiten verificaciones porque el compilador conoce ambas partes. Tercero,inline optimizations eliminan overhead entirely when beneficial. El resultado: código equivalente a convenciones no seguras como Yolo-C mientras mantiene protección completa.

Esta tecnología interesa a desarrolladores de sistemas embebidos críticos, kernels seguros, motores JavaScript (como límites entre JS y WebAssembly), y herramientas de análisis de código que necesitan separación segura entre módulos. Compiladores generando código Fil-C encontrarían valor particular.

Sus limitaciones incluyen overhead moderado en casos complejos (argumentos introspectivos comova_arg), y menor rendimiento que convenciones completamente inseguras. No elimina todas las comprobaciones, solo las mueve a rutas no comunes. Alternativas van desde C tradicional (máximo rendimiento, cero seguridad) hasta CHERI (protección hardware). La decisión depende del equilibrio нужный entre seguridad garantizada y rendimiento absoluto.