Когда драйвер ядра Linux загружается динамически, как нам написать функцию C, чтобы сообщить местоположение (адрес памяти), где находится модуль драйвера?
Это больше для Windows, однако, если мы адаптируем аналогичный драйвер для Linux, будет ли это работать?
long sizeOfExe = 0; FILE *fp; fp = fopen("./Mini.ko", "rb"); // reading itself fseek(fp, 0L, SEEK_END); sizeOfExe = ftell(fp); printf("The size of this driver module is: %ld bytes\n", sizeOfExe); int* addressStartOfFile = &fp; printf("Location of this driver module starts at: 0x%x\n", addressStartOfFile); printf("Location of this driver module ends at: 0x%x\n", (addressStartOfFile+sizeOfExe)); /* The size of this driver module is: 18727 bytes Location of this driver module starts at: 0x28ff30 Location of this driver module ends at: 0x2a23cc */
&
работает и с именами функций. Остерегайтесь таких вещей, как кэш инструкций и данных! Представление памяти, которое вы получаете в одном режиме, может не совпадать с представлением в другом, если были какие-то недавние изменения (/ошибки памяти?). - person Chris Stratton   schedule 19.12.2013