2014-12-20 2 views
0

Я пытаюсь прочитать сегмент кода процесса, обращающегося к API ядра. Я использую mm_struct, чтобы получить первый и последний адрес сегмента кода указанного процесса. (ref: http://www.makelinux.net/books/lkd2/ch14lev1sec1). Затем я пытаюсь скопировать содержимое адреса с помощью функции copy_from_user(), с помощью следующего кода:Модуль ядра Linux копирует .text сегмент процесса

char code[10]; 
unsigned long copy_ans; 
copy_ans = copy_from_user(code, current->mm->start_code, 10); 
//10 is the number of bytes that should be copied. 

Это доцент, кажется, действительно скопировать десять байт, а значение «кода» всегда:

\ x7fELF \ x02 \ x01 \ x01

Я начинаю сомневаться в том, что даже читает из адреса, а не только преобразует значение адреса СИМВОЛУ. Я бы GLAB, если кто-то может указать на проблему для меня :)

Благодарности

ответ

1

start_code это просто часть процесса, который отображается в виде кода. Это может прорваться через фактический код процесса. В частности, большинство исполняемых файлов будут отображаться в своих собственных заголовках файлов (заголовки ELF) как часть сегмента кода. Это то, что вы видите в своем буфере.

Прочитайте больше байтов, и вы в конечном итоге начнете видеть фактический код.

+1

Кажется, вы правы, я вижу еще несколько значений гексагона, когда я устанавливаю прочитанные байты в 2048. Тем не менее, я все еще не уверен, printk действительно не работает должным образом в этих числах. Я попытаюсь отправить данные через Netlink позже, и если он будет работать, я буду уведомлять и устанавливать ваш ответ как принятый. Благодарю. – Talkopel

Смежные вопросы