¿Cómo puedo, en tiempo de ejecución (no LD_PRELOAD
), interceptar/enganchar una función C como fopen()
en Linux, a la Detours para Windows? Me gustaría hacer esto desde Python (por lo tanto, supongo que el programa ya está ejecutando una máquina virtual CPython) y también volver a enrutar al código de Python. Estoy bien con solo enganchar funciones de biblioteca compartida. También me gustaría hacer esto sin tener que cambiar la forma en que se ejecuta el programa.¿Cómo interponer dinámicamente las funciones C de Python en Linux (sin LD_PRELOAD)?
Una idea es rodar mi propia herramienta basada en ptrace()
, o en volver a escribir código que se encuentra con dlsym()
o en el PLT, y la orientación ctypes
funciones -generated C-exigible, pero pensé que pediría aquí en primer lugar. Gracias.
¿Cómo lo harías * con * LD_PRELOAD? –
Tendrá que escribir un módulo nativo para hacer el trabajo de bajo nivel para usted. Incluso si logra acceder y modificar el PLT de Python (que probablemente sea posible), necesitará un código para iniciar la máquina virtual de Python. –
@Matt Joiner: Por cierto, usted hace su pregunta, entiendo que no le gusta algo que dije, en cuyo caso sería productivo/constructivo si pudiera ser más específico. Pero en caso de que en realidad solo lo estuvieras preguntando, así es como haces la función de interposición de forma no dinámica: http://stackoverflow.com/questions/426230/what-is-the-ld-preload-trick (y, sí, yo ' he aplicado esto muchas veces antes) – Yang