как присвоить значение EIP с языком C в Ubuntu - PullRequest
0 голосов
/ 08 июня 2010

где не так?как присвоить значение в eip, чтобы изменить место выполнения в программе?

Пожалуйста, помогите !!!!

ошибка: невозможно преобразовать 'mcontext_t *' в 'sigcontext *' в присваивании

struct ucontext {
    unsigned long     uc_flags;
    struct ucontext  *uc_link;
    stack_t       uc_stack;
    struct sigcontext uc_mcontext;
    sigset_t      uc_sigmask;   /* mask last for extensibility */
};

#include <stdio.h>
#include <signal.h>
#include <asm/ucontext.h>
void handler(int signum, siginfo_t *siginfo, void *uc0){
    struct ucontext *uc;
    struct sigcontext *sc;

    uc = (struct ucontext *)uc0;
    sc = &uc->uc_mcontext;

    sc->eip = target;
    //uc->uc_mcontext.gregs[REG_EIP]
}

int main (int argc, char** argv){
    struct sigaction act;
    act.sa_sigaction = handler;
    act.sa_flags = SA_SIGINFO;
    sigaction(SIGTRAP, &act, NULL);

    asm("movl $skipped, %0" : : "m" (target));

    asm("int3"); // cause SIGTRAP
    printf("to be skipped.\n");
    asm("skipped:");
    printf("Done.\n");
}

1 Ответ

1 голос
/ 08 июня 2010

Просто к вашему сведению. Проверьте man setjmp и man longjmp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...