История изменений
Исправление firkax, (текущая версия) :
Страницу надо смапить как исполняемую (man mmap, PROT_EXEC). Впрочем, если у тебя ядро 32-битное без PAE и/или старый проц то можно это не делать т.к. там этот флаг не проверяется.
Собственно вызов кода так:
typedef void (*void_func)(void);
....
((void_func)0x12345678)();
Сделает CALL 0x12345678
А тебе точно именно jmp нужен? Зачем? Может CALL сойдёт или даже лучше?
JMP можно сделать либо встроенным ассемблером, либо в gcc есть расширение - goto на указатель (но я им не пользовался никогда).
Исправление firkax, :
Страницу надо смапить как исполняемую (man mmap, PROT_EXEC). Впрочем, если у тебя ядро 32-битное без PAE и/или старый проц то можно это не делать т.к. там этот флаг не проверяется.
Собственно вызов кода так:
typedef void (*void_func)(void);
....
((void_func)0x12345678)();
Сделает CALL 0x12345678
А тебе точно именно jmp нужен? Зачем? Может CALL сойдёт или даже лучше?
Исправление firkax, :
Страницу надо смапить как исполняемую (man mmap, PROT_EXEC). Впрочем, если у тебя ядро i386 без PAE и/или старый проц то можно это не делать т.к. там этот флаг не проверяется.
Собственно вызов кода так:
typedef void (*void_func)(void);
....
((void_func)0x12345678)();
Сделает CALL 0x12345678
А тебе точно именно jmp нужен? Зачем? Может CALL сойдёт или даже лучше?
Исправление firkax, :
Страницу надо смапить как исполняемую (man mmap, PROT_EXEC). Впрочем, если у тебя i386 без PAE и/или старый проц то можно это не делать т.к. там этот флаг не проверяется.
Собственно вызов кода так:
typedef void (*void_func)(void);
....
((void_func)0x12345678)();
Сделает CALL 0x12345678
А тебе точно именно jmp нужен? Зачем? Может CALL сойдёт или даже лучше?
Исходная версия firkax, :
Страницу надо смапить как исполняемую (man mmap, PROT_EXEC).
Собственно вызов кода так:
typedef void (*void_func)(void);
....
((void_func)0x12345678)();
Сделает CALL 0x12345678
А тебе точно именно jmp нужен? Зачем? Может CALL сойдёт или даже лучше?