mejor práctica para entregar una API de C que oculta funciones internas [cerrado]

He escrito una biblioteca C que consta de unos pocos archivos .h y archivos .c. Lo compilo como una biblioteca estática .a.

Me gustaría exponer solo ciertas funciones al usuario y mantener el resto lo más "oscuro" posible para que la ingeniería inversa sea razonablemente difícil.

Idealmente, mi biblioteca consistiría en:

1- un archivo .h con solo las funciones expuestas al usuario

2- myLibrary.a: lo más irreversible posible

¿Cuáles son las mejores prácticas para eso? ¿Dónde debería mirar, hay algún buen tutorial / libro en alguna parte?

Más específicamente:

para 1

Ya tengo todos mis .h y .c funcionando y me gustaría evitar cambiarlos, mover las declaraciones de funciones de .h a .c y pasar a referencias circulares potenciales pbs. ¿Es eso posible?

Por ejemplo, ¿es una buena idea crear un nuevo archivo .h que usaría solo para distribuir con mi .a? Que .h contendría copias de las funciones que quiero exponer y reenviar las declaraciones de los tipos que uso. ¿Es eso una buena idea?

para 2

a) ¿de qué gcc flags (o xcode) debo tener en cuenta (para eliminar, no tener símbolos de depuración, etc.) b) un buen puntero para aprender cómo hacer la ofuscación de código?

Cualquier pensamiento ayudará,

Gracias baba

Respuestas a la pregunta(3)

Su respuesta a la pregunta