Вызвать функцию по адресу.

Модератор: Модераторы разделов

max100
Сообщения: 12

Вызвать функцию по адресу.

Сообщение max100 »

Пытаюсь вызывать нужную функцию по её адресу:
(модуль ядра)

Код:

#include <linux/init.h> #include <linux/module.h> MODULE_LICENSE("GPL"); int (*freeze_processes)(void); static int test_init(void) { freeze_processes = 0x0c0184c80; freeze_processes(); return 0; } static void test_exit(void) { printk(KERN_ALERT "Goodbye, cruel world\n"); } module_init(test_init); module_exit(test_exit);


Где 0x0c0184c80 адрес функции и она срабатывает, все процессы реально "замерзают".

Только получаю жалобу при компиляции
/usr/src/test/test.c: In function ‘hello_init’:
/usr/src/test/test.c:10: warning: assignment makes pointer from integer without a cast
та самая строчка
freeze_processes = 0x0c0184c80;
что не так и как исправить?
или это нормально здесь?
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Вызвать функцию по адресу.

Сообщение Rootlexx »

max100 писал(а):
27.07.2013 20:42
что не так и как исправить?

Код: Выделить всё

freeze_processes = (int (*)(void)) 0x0c0184c80;

max100 писал(а):
27.07.2013 20:42
или это нормально здесь?

Компилятор просто предупреждает вас о несоответствии типов.
Спасибо сказали:
max100
Сообщения: 12

Re: Вызвать функцию по адресу.

Сообщение max100 »

Спасибо, так компилируется нормально.
Сейчас сделал так, включил
#include "test.h"
а туда вписал
int (*freeze_processes)(void) = (int (*)(void)) 0x0c0184c80;
как будто все правильно собирается.
Спасибо сказали: