2012-10-25 5 views
0

ptrace() 호출을 사용하여 사용자 정의 함수에서 정보를 잡아 내고 싶습니다.linux ptrace() 함수 정보 얻기

하지만 기능 주소가 안정적이지 않습니다 (ASLR).

프로그래밍 방식으로 gdb와 같은 다른 프로그램의 기능 정보를 얻으려면 어떻게해야합니까?

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <unistd.h> 
#include <sys/user.h> 
#include <sys/wait.h> 
#include <sys/ptrace.h> 
#include <dlfcn.h> 
#include <errno.h> 

void error(char *msg) 
{ 
    perror(msg); 
    exit(-1); 
} 

int main(int argc, char **argv) 
{ 
    long ret = 0; 
    void *handle; 
    pid_t pid = 0; 
    struct user_regs_struct regs; 
    int *hackme_addr = 0; 

    pid = atoi(argv[1]); 

    ret = ptrace(PTRACE_ATTACH, pid, NULL, NULL); 
    if(ret<0) 
    { 
     error("ptrace() error"); 
    } 

    ret = waitpid(pid, NULL, WUNTRACED); 
    if(ret<0) 
    { 
     error("waitpid()"); 
    } 

    ret = ptrace(PTRACE_GETREGS, pid, NULL, &regs); 
    if(ret<0) 
    { 
     error("GETREGS error"); 
    } 

    printf("EIP : 0x%x\n", (int)regs.eip); 

    ptrace(PTRACE_DETACH, pid, NULL, NULL); 

    return 0; 
} 

답변

0

ptrace는 약간 엉망이지만 유용 할 수 있습니다.

다음은 ptrace 예제 프로그램입니다. I/O 관련 시스템 호출을 일시 중지하는 데 사용됩니다. http://stromberg.dnsalias.org/~strombrg/slowdown/

물론 gdb를 공부할 수도 있지만 ISTR은 꽤 큰 편입니다.

strace 및 ltrace, 특히 기호가 나열되어 있으므로 ltrace를 확인할 수도 있습니다.

HTH