Encontré esto para BSD.
Tendrás que pensar para cual de los *BSD querés desarrollar ... ya que FreeBSD, OpenBSD, DragonflyBSD, NetBSD y demás comparten un pasado en común pero son proyectos y sistemas diferentes.
Escuché muy buenos reviews de ese libro, pero no lo leí ... lo que te aconsejaría es que lo bajes de algún lado, pispees si tiene lo que necesitás y después ves si te conseguís el de papel o no.
Ese libro es algo viejito y no tiene en cuenta nuevas revisiones a POSIX sin contar cómo fueron mutando los diferentes sistemas Unix-Like como Linux (que pffff, una distribución de hoy en día es algo que vagamente resembla lo que es un verdadero unix)
No estoy acostumbrado, tampoco tengo muchos conocimientos en ASM, pero C me parecio muy lioso al menos a mi cuando llegué al tema de los arreglos, y que ASM es mucho más directo que C, entiendo mejor el disassembler que el código de C en algunos casos xD.
Si, al ser un lenguaje más simplificado en sintaxis y formateo se hace más rápido de escribir. El problema es mantenerlo y la portabilidad, sobre todo la portabilidad.
Si escribís assembly para una arquitectura te olvidás del resto ... si escribís un C medianamente limpio compilás para cualquier otra arquitectura (x86/x86_64/"x32"/arm/sparc/mips/blah ), para eso se inventó C como pilar de Unix !! x'3
En lo de la portabilidad tienes toda la razón, ya veré lo que pasa cuando tenga que hacer códigos más complejos que el de hay arriba.
Pensá que varios routers son de arquitectura arm o mips (el mío es un linux mips). Pero depende mucho de a qué "audiencia" apuntes, claro ! ;
)
El código de stackoverflow por lo que entiendo quiere "hookear" la syscall open la 5.
Correcto, ése es el número de la syscall (no te preocupes, hay un .h que incluye todos los defines así no tenés que andar recordando numeros
)
Pero no entiendo una vez que consigues la dirección que haces con ella?
1) Obtenés la dirección a la "tabla" (es un vector) de syscalls
2) Le cambiás la protección de readonly a readwrite con change_page_attr()
3) Ya pudiendo escribir, cambiás la dirección de la syscall que te interesa (usando el número de syscall -que es la posición en el vector-
que sacás de un define por comodidad/portabilidad ) por tu propia función.
4) Profit.
Saludos.
P.S → Cuando se trata del código de Linux, toco de oído por lo poco que programé hace algún tiempo ... conste x'D
P.S 2 → Perdón por la demora :c ...