es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo leería un depurador en Linux/Windows el registro PC en ARM32 y Aarch64?

¿Cómo leería un depurador ejecutándose en Linux/Windows el registro PC en ARM32 y Aarch64?
¿Cómo acceder al valor del registro de instrucción?

¿Cómo utilizar ptrace para recuperar el registro PC de un proceso secundario en Linux?
¿Cómo utilizar GetThreadContext para recuperar el registro PC de la estructura de contexto de un proceso secundario en Windows?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Leyendo el Registro PC en ARM32 y Aarch64

    Para leer el registro PC en ARM32 y Aarch64, un depurador que se ejecuta en Linux o Windows puede utilizar diferentes métodos dependiendo de la plataforma.

    Leyendo el Registro PC en ARM32

    Para acceder al Valor del Registro de Instrucción en ARM32, el depurador puede utilizar la llamada al sistema ptrace en Linux. Esta llamada al sistema permite el rastreo de un proceso hijo y puede recuperar su contexto, incluido el valor del registro PC. El siguiente fragmento de código muestra un ejemplo de uso de ptrace para recuperar el registro PC de un proceso hijo:

    #include <sys ptrace.h="">
    
    // Adjuntar al proceso hijo y obtener el valor del registro PC
    void adjuntar_y_obtener_pc(pid_t child) {
        long pc = ptrace(PTRACE_PEEKUSER, child, 4*15, NULL); // El registro PC es R15 (15º registro)
        printf("PC del proceso hijo: %lx\n", pc);
    }
    

    En Windows, un depurador puede utilizar la función GetThreadContext para recuperar el registro PC desde la estructura de contexto de un proceso hijo. El siguiente fragmento de código muestra un ejemplo de uso de GetThreadContext para recuperar el registro PC desde una estructura de contexto:

    #include <windows.h>
    
    // Adjuntar al proceso hijo y obtener el valor del registro PC
    void adjuntar_y_obtener_pc(HANDLE child) {
        CONTEXT ctx;
        ctx.ContextFlags = CONTEXT_CONTROL;
        GetThreadContext(child, &ctx);
        printf("PC del proceso hijo: %lx\n", (long) ctx.Pc);
    }
    

    Leyendo el Registro PC en Aarch64

    Para acceder al Valor del Registro de Instrucción en Aarch64, el depurador también puede utilizar la llamada al sistema ptrace en Linux. Sin embargo, el valor del registro PC se almacena en una ubicación diferente en la estructura de contexto de usuario. El siguiente fragmento de código muestra un ejemplo de uso de ptrace para recuperar el registro PC de un proceso hijo en Aarch64:

    #include <sys ptrace.h="">
    
    // Adjuntar al proceso hijo y obtener el valor del registro PC
    void adjuntar_y_obtener_pc(pid_t child) {
        long pc = ptrace(PTRACE_PEEKUSER, child, 8*32+15, NULL); // El registro PC es X15 (32+15=47º registro)
        printf("PC del proceso hijo: %lx\n", pc);
    }
    

    En Windows, un depurador también puede utilizar la función GetThreadContext, pero el registro PC se almacena en un campo diferente de la estructura de contexto. El siguiente fragmento de código muestra un ejemplo de uso de GetThreadContext para recuperar el registro PC desde una estructura de contexto en Aarch64:

    #include <windows.h>
    
    // Adjuntar al proceso hijo y obtener el valor del registro PC
    void adjuntar_y_obtener_pc(HANDLE child) {
        CONTEXT ctx;
        ctx.ContextFlags = CONTEXT_CONTROL;
        GetThreadContext(child, &ctx);
        printf("PC del proceso hijo: %lx\n", (long) ctx.Pc);
    }
    

    En resumen, para leer el registro PC en ARM32 y Aarch64, un depurador que se ejecuta en Linux o Windows puede utilizar ptrace en Linux o GetThreadContext en Windows para recuperar el valor de la estructura de contexto de usuario de un proceso hijo.</windows.h></windows.h>

Comments are closed.